dec*_*eze 22 apache .htaccess mod-rewrite
在一个严重依赖.htaccessRewriteRules for PrettyURLs 的应用程序(在我的情况下是CakePHP),如何正确设置指令以从重写中排除某些目录?那是:
/appRoot/.htaccess
app/
static/
Run Code Online (Sandbox Code Playgroud)
默认情况下,/appRoot/*正在重写的每个请求都被重新编写app/webroot/index.php,正在分析它并调用相应的控制器操作.这是通过以下指令完成的.htaccess:
RewriteBase /appRoot
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
Run Code Online (Sandbox Code Playgroud)
我现在想从这个重写中排除一些目录,比如static /.我在Cake RewriteRules 之前试过这个:
RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]
Run Code Online (Sandbox Code Playgroud)
它到目前为止工作,不再重写请求,但现在所有请求都被跳过,甚至合法的Cake请求都不应该匹配^(static|otherDir).*$.
我尝试了这些规则的几种变体,但无法让它以我想要的方式工作.
而正确的答案是...
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]
Run Code Online (Sandbox Code Playgroud)
我仍然不明白为什么即使使用这些指令,最初也会调用根目录中的index.php文件.它现在位于
/appRoot/app/views/pages/home.ctp
Run Code Online (Sandbox Code Playgroud)
并通过Cake处理.现在有了这个,我想这也会有效(迈克的建议略有修改版本,未经测试):
RewriteCond $1 !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$ app/webroot/$1 [L]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3295 次 |
| 最近记录: |