提问人:deceze 提问时间:8/6/2008 最后编辑:Ajeet Vermadeceze 更新时间:5/17/2023 访问量:4024
.htaccess 指令 *not* 重定向某些 URL
.htaccess directives to *not* redirect certain URLs
问:
在一个严重依赖 RewriteRules 的 PrettyURL(在我的情况下是 CakePHP)的应用程序中,我如何正确设置指令以从此重写中排除某些目录?那是:.htaccess
/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).*$
我尝试了这些规则的几种变体,但无法让它按照我想要的方式工作。
答:
1赞
GateKiller
8/6/2008
#1
从前面的规则中删除 [L]:
RewriteBase /appRoot
RewriteRule ^$ app/webroot/
RewriteRule (.*) app/webroot/$1
[L] 的意思是“在此处停止重写过程,不再应用任何重写规则。
1赞
Lauren
8/6/2008
#2
您能否不将该条件应用于以下规则,但要否定,例如(有一些变化,我不太擅长记住 .htaccess 规则,因此标志可能是错误的):
RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/ [L]
RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]
6赞
deceze
8/7/2008
#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 处理。现在有了这个,我想这也会起作用(Mike 建议的略微更改版本,未经测试):
RewriteCond $1 !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$ app/webroot/$1 [L]
评论