Назад | Перейти на главную страницу

Установить условие HTTP для правила перенаправления

У меня есть правило перенаправления .htaccess что пересылает агента из A.html к B.html используя следующий шаблон:

Redirect 301 /A.html http://mysite.com/B.html

Поскольку Redirect Директива требует установить целевой хост, возможно ли, чтобы это правило преобладало только на определенном хосте? У меня есть и тестовый домен, и домен развертывания, и я хочу, чтобы он находился только в домене развертывания. Я могу установить условия HTTP для Rewrite правила, но как я могу для HTTP Redirectс?

Вы действительно можете это сделать, но потеряете код перенаправления 301.

SetEnvIfNoCase Host "myotherdomain.com" redirectthisdomain

<Files "A.html">
   Order Deny,Allow
   Deny from env=redirectthisdomain

   ErrorDocument 403 http://mysite.com/B.html
</Files>

Я пришел к выводу, что с чистым Redirect директивы. Если необходимо перенаправить посетителя в определенных условиях HTTP, необходимо использовать Rewrite правила.

просто поместите правило перенаправления в конфигурацию vhost вашего домена развертывания. таким образом он будет активен только для этого хоста.

Мой сценарий: два домена (domain.org и domain.info), указывающие на один и тот же сайт, и я хочу, чтобы .info использовался вместо .org

Сайт написан на PHP и в самом начале каждой страницы есть что-то вроде этого

if (stristr($_SERVER['SERVER_NAME'], 'domain.org') === FALSE) {
    // do standard initial operations
} else {
    // insert here the code to rebuild the correct path and put it in $newpath
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.domain.info/$newpath");
}

Таким образом вы информируете как пользователей, так и сканер поисковых систем о вашей конфигурации.

Быстрый пример: если посетитель переходит на dev.example.com/A.html, он перенаправляется на B.html. Если они перейдут на www.example.com/A.html, они будут перенаправлены на C.html; оба с перенаправлением 301.

RewriteEngine on
RewriteCond %(HTTP_HOST) ^dev.example.com$ [NC]
RewriteCond %(REQUEST_URI) ^/A.html
RewriteRule ^(.*)$ http://dev.exmaple.com/B.html [R=301]

RewriteCond %(HTTP_HOST) !^dev.example.com$ [NC]
RewriteCond %(REQUEST_URI) ^/A.html
RewriteRule ^(.*)$ http://dev.exmaple.com/C.html [R=301]

Вы можете узнать больше о Mod_Rewrite в Apache интернет сайт.