.htaccess指令 *not* 重定向某些URL

8qgya5xd  于 2023-05-18  发布在  其他
关注(0)|答案(3)|浏览(138)

在一个严重依赖.htaccess RewriteRules的PrettyURLs(在我的例子中是CakePHP)的应用程序中,我如何正确地设置指令来从重写中排除某些目录?即:

/appRoot/.htaccess
         app/
         static/

默认情况下,对/appRoot/*的每个请求都会被重写,以便由app/webroot/index.php拾取,在那里进行分析并调用相应的控制器操作。这是通过.htaccess中的以下指令完成的:

RewriteBase /appRoot

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

我现在想从重写中排除几个目录,如static/。我试过这个 * 之前 * 蛋糕重写规则:

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

目前为止,它的工作原理是不再重写请求,但现在所有请求都被跳过,即使是不匹配^(static|otherDir).*$的合法Cake请求。
我尝试了这些规则的几种变化,但不能让它以我想要的方式工作。

rvpgvaaj

rvpgvaaj1#

正确答案是。。

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

并通过蛋糕处理。现在有了这个,我想这也会起作用(Mike建议的稍微修改版本,未经测试):

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

puruo6ea2#

你能不能不将条件应用于以下规则,而是使用否定,就像在(有一些变化,我不太擅长记住.htaccess规则,所以标志可能是错误的):

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

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

bejyjqdl3#

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

RewriteBase /appRoot

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

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

相关问题