parsek
@parsek

Как реализовать раздельные редиректы в htaccess?

Столкнулся с задачей: нужно сделать 301 редирект если сайт не начинается с www в любом случае. Если сайт запрашивает не поисковый робот, то должен произойти 302 редирект на зеркало. Если запрашивает поисковый робот, то управление должно передастся текущему домену. Даже не спрашивайте зачем это, но вот поставили такую задачу. Сейчас реализовал половину задачи в .haccess, а другую путем написания плагина для CMS.

Но способ не универсальный и пробую сделать так:

RewriteEngine On
RewriteBase /

# Редирект если не робот и начинается с www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %{HTTP_USER_AGENT} !(googlebot|yandexbot|msnbot) [NC]
RewriteRule ^(.*)$ http://www.site2.com/$1 [L,R=302]

# Редирект если не начинается с www
RewriteCond %{HTTP_HOST} ^([^www].*)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

# Запуск сайта на текущем домене
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


Но выходит, что после второго прохождения файла .htaccess, если домен без www, происходит все равно 302 редирект на зеркало. И вот не знаю как решить такую задачу.
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега htaccess
RewriteEngine On
RewriteBase /

# Редирект если не начинается с www
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

# Редирект если не робот и начинается с www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %{HTTP_USER_AGENT} !(googlebot|yandexbot|msnbot) [NC]
RewriteRule ^(.*)$ http://www.site2.com/$1 [L,R=302]

# Запуск сайта на текущем домене
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


поменяй местами просо и все, в таком случае бот будет частным случаем редиректа на ввв, и во второй проход урлы не будут меняться а следовательно и применяться правила.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы