Директивы .htaccess, чтобы * не * перенаправлять определенные URL-адреса
В приложении, которое в значительной степени полагается на .htaccess
RewriteRules для своих PrettyURL (CakePHP в моем случае), как мне правильно настроить директивы, чтобы исключить определенные каталоги из этой перезаписи? То есть:
/appRoot/.htaccess
app/
static/
По умолчанию каждый запрос к /appRoot/*
переписывается, чтобы его принял app/webroot/index.php
, где он анализируется и вызываются соответствующие действия контроллера. Это делается этими директивами в .htaccess
:
RewriteBase /appRoot
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
Теперь я хочу исключить из этой перезаписи несколько каталогов, таких как static /. Я пробовал с этим до Cake RewriteRules:
RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]
Пока он работает, запросы больше не перезаписываются, но теперь все запросы пропускаются, даже законные запросы Cake, которые не должны совпадать ^(static|otherDir).*$
.
Я пробовал несколько вариантов этих правил, но не могу заставить их работать так, как я хочу.
Ответов (3)3
И правильный ответ iiiiis ...
RewriteRule ^(a|bunch|of|old|directories).* - [NC,L]
# all other requests will be forwarded to Cake
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
Я до сих пор не понимаю, почему файл index.php в корневом каталоге был вызван изначально даже с этими директивами. Сейчас он находится в
/appRoot/app/views/pages/home.ctp
и обрабатывается также через Cake. Теперь, когда это установлено, я полагаю, что это тоже сработало бы (слегка измененная версия предложения Майка, непроверенная):
RewriteCond $1 !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$ app/webroot/$1 [L]
Не могли бы вы применить условие к следующим правилам, но с отрицанием, как в (с некоторыми его вариациями, я не слишком хорошо запоминаю правила .htaccess, поэтому флаги могут быть неправильными):
RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/ [L]
RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]