понимание того, почему смена htaccess сработала - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть 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).

1 Ответ

0 голосов
/ 09 сентября 2018

RewriteCond относится только к следующему RewriteRule в файле. Таким образом, если у вас есть 4 RewriteRule после RewriteCond, оно влияет только на первое.

https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond говорит

Один или несколько RewriteCond могут предшествовать директиве RewriteRule

Вы можете объединить RewriteCond с [AND] (неявным) или [OR]. Но не RewriteRule.

В этой же ссылке показан пример:

RewriteCond  "%{HTTP_USER_AGENT}"  "(iPhone|Blackberry|Android)"
RewriteRule  "^/$"                 "/homepage.mobile.html"  [L]

RewriteRule  "^/$"                 "/homepage.std.html"     [L]

Если это телефон, перейдите на мобильную страницу, в противном случае перейдите на стандартную страницу. RewriteCond относится только к первому. В противном случае все пользователи всегда будут видеть мобильную страницу в этом случае.

К вашему сведению: если вы разделите свои домены в отдельном VirtualHost, вы сможете манипулировать одной конфигурацией, не влияя на другую. И это делает раскол для вас, так что вам даже не нужно RewiteCond больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...