Как исключить карту сайта из перенаправления 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-адрес вам следует просто не переписывать запрос вообще. Это достигается за счет использования одного-
(дефис) в строке замены .
Кроме того, я предполагаю, что вы не включаете в запрос косую черту, поэтому/?
в регулярном выражении является излишним. (Обработчик по умолчанию для.xml
files в любом случае не разрешает информацию о пути, поэтому косая черта в конце, скорее всего, приведет к 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]