Не выполнено условие .htaccess [OR], которое вызывает неожиданную ошибку RewriteRule - PullRequest
0 голосов
/ 19 февраля 2019

У нас есть очень большой файл .htaccess, в котором мы создаем RewriteRules на основе другого домена RewriteCond.Мы используем флаг [ИЛИ], чтобы убедиться, что условия «www» и «домен» выполнены, а затем перенаправить на определенные страницы.

Пример:

# DOMAIN 1
RewriteCond %{HTTP_HOST} ^domain1\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain1\.com$
RewriteRule ^en/contact$ https://domain1.com/en/contact.html [L,R=301]
RewriteRule ^fr/nouvelles$ https://domain1.com/fr/articles.html [L,R=301]
RewriteRule ^en/career$ https://domain1.com/en/career.html [L,R=301]
RewriteRule ^fr/contact$ https://domain1.com/fr/contact.html [L,R=301]

# DOMAIN 2
RewriteCond %{HTTP_HOST} ^domain2\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain2\.com$
RewriteRule ^fr/maison-payante$ https://domain2.com/fr/articles.html [L,R=301]
RewriteRule ^en/cash-damming$ https://domain2.com/en/articles.html [L,R=301]
RewriteRule ^fr/nos-proprietes$ https://domain2.com/fr/nos-proprietes.html [L,R=301]
RewriteRule ^en/40km-program$ https://domain2.com/en/articles.html [L,R=301]
RewriteRule ^fr/mes-proprietes$ https://domain2.com/fr/nos-proprietes.html [L,R=301]
RewriteRule ^en/our-properties$ https://domain2.com/en/our-properties.html [L,R=301]

Проблема

При посещении http://domain1.com/en/40km-program будет перенаправлен на https://domain2.com/en/articles.html.

Следующее правило применяется, даже если RewriteCond не выполняется:

RewriteRule ^en/40km-program$ https://domain2.com/en/articles.html [L,R=301]

Синтаксис файла .htaccess кажется хорошим (проверено в двух разных инструментах проверки синтаксиса).

Как это могло произойти?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 19 февраля 2019

Кажется, что не может быть несколько RewriteCond, за которыми не может следовать несколько RewriteRule:

Директива RewriteCond определяет условие правила.Один или несколько RewriteCond могут предшествовать директиве RewriteRule.Следующее правило используется только в том случае, если текущее состояние URI совпадает с его шаблоном, и если эти условия соблюдены.https://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html

Это все: https://serverfault.com/a/214521/59126

...