2009-05-08 5 views
5

Возникли проблемы с надлежащей регулярное выражение для RewriteCondКак сопоставить подкаталоги в RewriteCond?

RewriteCond %{REQUEST_URI} !^/foo/ 

Работы, как и ожидалось, то есть, не применяется следующая перезапись всех URL-адресов, которые начинаются с/Foo /.

RewriteCond %{REQUEST_URI} !^/foo/bar/ 

С другой стороны, не работает, как я ожидаю. URL-адреса, начинающиеся с/foo/bar /, все еще переписываются.

Как ввести правильное регулярное выражение для исключения подкаталогов?

+0

Как фактические правила выглядят как? – Gumbo

+0

Это должно сработать. Не могли бы вы установить RewriteLog с RewriteLogLevel по крайней мере 3 и добавить его в свой вопрос? –

ответ

7

Возможно, это новый URL-адрес внутреннего перенаправления, к которому применяется правило. L flag делает это.

[...], если RewriteRule генерирует внутреннее перенаправление (которое часто возникает при перезаписи в контексте каждого каталога), то это будет инжектирует запрос и будет вызывать обработку необходимо повторить, начиная с первым RewriteRule.

Если вы хотите, чтобы убедиться, что начальный URL путь не начинается с «/ Foo/бар», проверьте request line (см THE_REQUEST variable) вместо:

RewriteCond %{THE_REQUEST} !^[A-Z]+\ /foo/bar/ 
RewriteRule … 
+0

Не знаю, как и почему, но это работает – edgars

+0

@Gumbo: не могли бы вы точно объяснить регулярное выражение, которое вы использовали в своем предложении? Он работает и для меня, и я думаю, что он соответствует первому GET, но не может понять последующие «/» и причина отсутствия домена до «/ foo/bar /» – Stratboy

+0

@Stratboy Я надеялся, что связанные страницы объяснять все. Ну, шаблон '^ [A-Z] + \/foo/bar /' проверяет строку запроса HTTP, как видно из анализатора HTTP сервера, и условие является истинным только тогда, когда шаблон не сопоставляется. Возможно, это '\' отвлекает вас, но это все еще часть шаблона. – Gumbo

Смежные вопросы