У меня есть 2 домена, указывающих на мой сервер. htaccess в основном таков:
RewriteCond %{HTTP_HOST} (www\.)?parkeddomain\.net [NC]
RewriteRule ^page1\.html$ https://www.newsite.net/page1/ [L,R=301,NC]
RewriteRule ^page2\.html$ https://www.newsite.net/page2/ [L,R=301,NC]
Я тоже хотел перенаправить домашнюю страницу. Итак, я использовал эти два правила в списке под тем же RewriteCond:
RewriteRule ^$ https://www.newsite.net [L,R=301,NC]
RewriteRule ^/$ https://www.newsite.net [L,R=301,NC]
Когда я добавляю эти два правила в КОНЕЦ списка RewriteRules при этом условии (которое указывает только один домен), он также перенаправлял мой ДРУГОЙ домен, очевидно, полностью игнорируя RewriteCond.
Но просто переместив эти два правила в верхнюю часть списка RewriteRules, теперь он работает так, как я хочу (например, не перенаправляет мой другой домен).
Почему это случилось?
Заранее спасибо. Просто хочу понять, почему это произошло. Единственными другими флагами, которые я использовал, был «NE» в паре перенаправлений, которые шли на ссылки с якорными ссылками (например, https://www.newsite.net/#jumptoanchorlink).
RewriteCond
применяется только к следующийRewriteRule
в файле. Таким образом, если у вас есть 4 RewriteRule
после RewriteCond
, только первый из них затронут.
https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond говорит
One or more RewriteCond can precede a RewriteRule directive
Вы можете комбинировать RewriteCond
с [И] (неявно) или [ИЛИ]. Но не RewriteRule
.
В этой же ссылке приводится пример:
RewriteCond "%{HTTP_USER_AGENT}" "(iPhone|Blackberry|Android)"
RewriteRule "^/$" "/homepage.mobile.html" [L]
RewriteRule "^/$" "/homepage.std.html" [L]
Если это телефон, перейдите на мобильную страницу, в противном случае перейдите на стандартную страницу. RewriteCond
относится только к первому. В противном случае все пользователи всегда будут видеть мобильную страницу в этом случае.
К вашему сведению: если вы разделите свои домены на отдельный VirtualHost, вы можете манипулировать одной конфигурацией, не влияя на другую. И он делает разделение за вас, так что вам больше не нужен RewiteCond
.
По какой-то причине я, хотя все rewriterules до пустой строки, будет придерживаться приведенной выше второй перезаписи ... и ценю совет VirtualHost. Большое спасибо за обстоятельный ответ, чувак. Ваше здоровье.