В моем файле .htaccess есть несколько правил RewriteRules. Однако одно конкретное правило выполняется только в том случае, если я удалю другое конкретное правило, независимо от того, как я упорядочиваю эти два правила.
Вот правило, имеющее более низкий приоритет:
RewriteRule ^([0-9]+)$ /beta/forward.php?id=$1 [L]
И вот правило, которое всегда имеет приоритет:
RewriteCond %{HTTP_HOST} ^domain1\.net$ [NC]
RewriteRule ^(.*)$ http://domain2.net/$1 [R=301,L]
И domain1, и domain2 фактически указывают на один и тот же веб-сайт. Итак, когда оба правила находятся в файле .htaccess и я получаю доступ
http://domain1.net/123
Второе правило выполняется первым, и я получаю два перенаправления, сначала на http://domain2.net/123 а затем (когда имя хоста больше не соответствует второму правилу) для http://domain2.net/beta/forward.php?id=123. Я попытался исправить второе правило, чтобы оно никогда не выполнялось для URL-адресов, которые содержат только числа, но я должен делать что-то не так, потому что это по-прежнему выполняется:
RewriteCond %{HTTP_HOST} ^ domain1\.net$ [NC]
RewriteRule ^(.*[^0-9]+.*)$ http://domain2.net/$1 [R=301,L]
Удалив только две строки из файла .htaccess, я могу сразу получить первое правило для обработки запроса.
Любая помощь будет принята с благодарностью.
В ваших правилах указаны эти процедуры:
Если URL-адрес состоит только из чисел, перейдите к URL-адресу бета-версии, за которым следуют эти числа и остановитесь.
Если вы посещаете домен 1, перейдите по тому же URL-адресу в домене 2 и остановитесь.
Когда L
встречается или правила завершены, обработка завершается. Все остальное - это новое соединение из браузера. Возможно, это вас смущает - порядок имеет значение, а затем совпадения. В L
должны позаботиться о вашей проблеме, когда они в порядке:
RewriteEngine on
RewriteRule ^([0-9]+)$ /beta/forward.php?id=$1 [L]
# конец обработки [L], если он только числовой
RewriteCond %{HTTP_HOST} ^domain1\.net$ [NC]
# если совпадение domain1.net без учета регистра…
RewriteRule ^(.*)$ http://domain2.net/$1 [R=301,L]
# перенаправить на domain2.net. Конец [L]
Думаю, вам стоит проверить флаги правил перезаписи (http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule) обратите внимание на то, что делают флаги C и L.