Подтвердить что ты не робот

.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]

Он работает до тех пор, что запросы больше не перезаписываются, но теперь пропускаются запросы all, даже законные запросы Cake, которые не должны совпадать с ^(static|otherDir).*$.

Я пробовал несколько вариантов этих правил, но не могу заставить его работать так, как я хочу.

4b9b3361

Ответ 1

И правильный ответ 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]

Ответ 2

Удалите [L] из предыдущих правил:

RewriteBase /appRoot

RewriteRule ^$ app/webroot/    
RewriteRule (.*) app/webroot/$1

[L] означает "Остановите процесс перезаписи здесь и не применяйте больше правил перезаписи".

Ответ 3

Не могли бы вы применить условие к следующим правилам, но с отрицанием, как и в (с некоторыми изменениями, я не слишком хорошо помню правила .htaccess, поэтому флаги могут быть неправильными):

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/ [L]

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]