.htaccess директивы для * не * перенаправление определенных URL-адресов

голоса
19

В приложении , которое в значительной мере опирается на .htaccessRewriteRules для своих PrettyURLs (CakePHP в моем случае), как я правильно настроить директивы , чтобы исключить определенные каталоги из этого переписывания? То есть:

/appRoot/.htaccess
         app/
         static/

По умолчанию каждый запрос /appRoot/*переписывается быть подобран app/webroot/index.php, где она анализируется и соответствующие действия контроллера в настоящее время вызываются. Это делается с помощью этих директив .htaccess:

RewriteBase /appRoot

RewriteRule ^$ app/webroot/     [L]
RewriteRule (.*) app/webroot/$1 [L]

Теперь я хочу , чтобы исключить несколько каталогов , как статические / из этого переписывания. Я пытался с этим , прежде чем торте RewriteRules:

RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]

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

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

Задан 06/08/2008 в 09:15
источник пользователем
На других языках...                            


3 ответов

голоса
1

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

RewriteBase /appRoot

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

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

Ответил 06/08/2008 в 09:19
источник пользователем

голоса
1

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

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

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]
Ответил 06/08/2008 в 09:26
источник пользователем

голоса
6

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

и обрабатываются через торт, а также. При этом в месте теперь, я полагаю, что это сработало бы, как хорошо (немного изменен вариант предложений Майка, непроверенный):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]
Ответил 07/08/2008 в 07:09
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more