.htaccess, похоже, игнорирует RewriteCond - PullRequest
2 голосов
/ 19 июля 2010

Это htaccess, который у меня есть: Options + FollowSymlinks

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/pages
RewriteRule ^(.+)/$ /$1 [NC]
RewriteRule ^$ /pages/index.php [NC]
RewriteRule ^([a-z]+)\?([^/]+)$ /pages/$1.php?$2 [NC]
RewriteRule ^([a-z]+)/([^/]+)$ /pages/$1.php?q=$2 [NC]
RewriteRule ^([a-z]+)$ /pages/$1.php [NC]
ErrorDocument 404 /pages/404.php

Что нужно сделать, довольно просто:

  • удалить косую черту из URL
  • прямой example.com/tomato to example.com/pages/tomato.php
  • прямой example.com/tomato?c=red&size=big to example.com/pages/tomato.php?c=red&size=big
  • direct example.com/tomato/red to example.com/pages/tomato.php?q=r

Но это проблема: любой URL-адрес страницы for //tomato.php соответствует 7-й строке .htaccess, которая создаст бесконечный цикл.Вот почему я добавил исключение для / pages, но оно, похоже, игнорируется - я все еще получаю 500 Internal Server Error с этим сообщением в журнале:

mod_rewrite: максимальное количество внутренних перенаправлений достигнуто.Предполагая ошибка конфигурации.Используйте «RewriteOptions MaxRedirects» для увеличения лимита, если это необходимо.

Может ли это быть связано с тем, что я запускаю это с виртуальными хостами?Если так, что нужно сделать, чтобы это исправить?

Ответы [ 2 ]

4 голосов
/ 19 июля 2010

RewriteCond применяется только к следующему RewriteRule, поэтому вы должны скопировать это условие для каждого правила.

0 голосов
/ 19 июля 2010

Вы можете использовать правило разрыва перед вашими другими правилами:

RewriteRule ^pages/ - [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...