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

我现在想排除像静态这样的几个目录/这个重写。我在Cake RewriteRules之前尝试了这个

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

它的工作原理是,请求不再被重写,但现在所有请求都被跳过,即使合法的Cake请求不应与 ^(static | otherDir)。* $

我尝试了这些规则的几个变体,但无法按照我想要的方式工作。

0
额外 编辑
意见: 1

3 答案

从以前的规则中删除[L]:

RewriteBase /appRoot

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

[L]的意思是“停止重写过程,不要再应用任何重写规则。”

0
额外

正确的答案是......

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进行处理。现在,我认为这会有效(Mike的建议略有改动,未经测试):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]
0
额外

你能不能把这个条件应用到下面的规则中,但是由于否定,(因为它有一些变化,我不太在记住.htaccess规则,所以标志可能是错的):

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

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