.htaccess - как исключить файл (или файлы по расширению) из 301 редиректа

Категория: Linux
Дата публикации: 9 марта, 2014 - 11:28
Последнее изменение: 21 мая, 2014 - 13:31

Это может пригодиться во многих ситуациях. Например - вы меняете домен для сайта, адрес меняется, весь контент, все URL остаются прежними.
Вопросов два -

1. как перенаправить посетителей на соответствующие страницы нового сайта? Без необходимости ручного прописывания редиректа ДЛЯ КАЖДОЙ страницы.
2. как исключить файл или файлы определенного типа из редиректа.

Решение:

RewriteEngine on
RewriteRule !\.(html|txt)$ http://newsite.com%{REQUEST_URI} [L,R=301]

Это правило, помещенное в .htaccess будет перенаправлять посетителя на запрашиваемую страницу, но уже на новом домене, при этом исключая файлы с расширением TXT и HTML из редиректа. То есть при обращении к этим файлам на старом домене - редиректа не произойдет и они откроются. Это может быть необходимо - например, для верификации домена в панелях Гугл и Яндекс вебмастера.

А вот правило проще - оно исключает из редиректа только robots.txt:

RewriteEngine on
RewriteRule !^robots\.txt$ http://newsite.com%{REQUEST_URI} [L,R=301]

Есть еще один вариант правила, которое работает точно так же:

<FilesMatch "robots.txt$">
RewriteEngine off
</FilesMatch>
RewriteEngine on
RewriteRule (.*) http://newsite.com/$1 [R=301,L]

Важно! Почему приведенные правила могут сразу не сработать:

1. если домен подключен к Cloudflare, то вы можете видеть закешированные значения. Решение - включить в панели "режим разработки" - "Development Mode".
2. если вы не прописали "RewriteEngine on" или же у вас уже есть такая строчка в файле .htaccess - тогда нужно добавить правило в то место, где строка есть. То есть не должно быть нескольких повторений этой строки в одном файле.
3. если правила изменены, то редиректа не будет или возникнет ошибка - тогда смотрите логи сервера, там будет указана причина.
4. браузеры могут так же кешировать значения редиректа - если браузер запомнил, что на странице есть редирект, то он может и дальше его делать, несмотря на то, что правила в .htaccess уже нет. Решение - использовать второй браузер, и проводить тестирование на двух-трех браузерах.

Добавить комментарий