Как исключить карту сайта из перенаправления httacess?

Я хочу, чтобы все URL-адреса были перенаправлены, кроме моего XML-файла карты сайта в корневом каталоге. htaccess должен разрешить https://old-domain/xml.xml разрешать HTTP 200, но в данный момент он все еще перенаправляется на новый домен. Как исключить файл (xml.xml) из перенаправления?

      RewriteEngine On

RewriteCond %{REQUEST_URI} !^/xml\.xml$
RewriteCond %{HTTP_HOST} ^old-domain\.de$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.de$
RewriteRule (.*)$ https://new-domain.de/$1 [R=301,L]

</IfModule>

1 ответ

       RewriteRule ^xml.xml/?$ /xml.xml [NC,L]

На самом деле я ожидаю, что это приведет к циклу перезаписи (ответ 500 Internal Server Error) из-за префикса косой черты в строке подстановки (обозначающего URL-путь).

Вероятно, вы видите кэшированное перенаправление, возникающее в результате ранее реализованного постоянного перенаправления 301. 301-ые коды постоянно кэшируются браузером. (Именно поэтому вам всегда следует тестировать с 302 (временными) редиректами.)

Вместо перезаписи на тот же URL-адрес вам следует просто не переписывать запрос вообще. Это достигается за счет использования одного-(дефис) в строке замены .

Кроме того, я предполагаю, что вы не включаете в запрос косую черту, поэтому/?в регулярном выражении является излишним. (Обработчик по умолчанию для.xmlfiles в любом случае не разрешает информацию о пути, поэтому косая черта в конце, скорее всего, приведет к 404 - если она не будет перезаписана.)

The NCФлаг здесь должен быть ненужным — вы должны постоянно использовать канонический URL-адрес (который, как я предполагаю, написан строчными буквами).

Таким образом, приведенное выше правило следует записать следующим образом:

      RewriteRule ^xml\.xml$ - [L]

(Не забудьте использовать обратную косую черту для буквальных точек в регулярном выражении.)

Это предотвратит обработку любых дальнейших директив mod_rewrite при запросе./xml.xml.

Ваше случайное закрытие</IfModule>тег подразумевает, что у вас есть другие директивы? Излишне говорить, что эти перенаправления должны располагаться в верхней части страницы..htaccessфайл.

И очистите кэш вашего браузера (и любого посредника) перед тестированием. Проверьте, открыт ли инспектор браузера и установлен флажок «Отключить кеш» на вкладке «Сеть».


Альтернатива

Поскольку вы хотите исключить из перенаправления только один URL-адрес/файл, вы можете включить его как часть существующего перенаправления в качестве дополнительного исключения.

Например:

      RewriteCond %{REQUEST_URI} !^/xml\.xml$
RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.de [NC]
RewriteRule (.*) https://new-domain.de/$1 [R=301,L]

The !префикс отменяет регулярное выражение. Таким образом, это успешно, если запрошенный URL-адрес не соответствует регулярному выражению.^/xml\.xml$.

ИЛИ, избегая необходимости дополнительного условия :

      RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.de [NC]
RewriteRule !^xml\.xml$ https://new-domain.de%{REQUEST_URI} [R=301,L]
Другие вопросы по тегам