我的htdocs / MVC /文件夹中有一个.htaccess文件,看起来像这样
RewriteEngine On
# if its already been rewritten to the specific folder
RewriteCond %{REQUEST_URI} ^/MVC/public/img/(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^/MVC/public/index.php$
# skip next two rules
RewriteRule .? - [S=2]
# rewrite image requests
RewriteRule (.*\.(jpg|png|gif))$ public/img/$1 [L]
# rewrite all other requests to the front controller index.php
RewriteRule (.*) public/index.php?url=$1 [QSA,L]
我想要实现的是所有图像请求都转到文件夹MVC / public / img所有其他请求转到文件夹MVC / public中的前端控制器index.php。这是设置这些规则并阻止mod_rewrite循环的最佳方法吗?
答案 0 :(得分:4)
使用S
标记跳过很好,但缺点是:
阻止循环的其他可能方法:
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
如果在前一个循环中应用了规则(或者应用了mod_alias重定向),则将此放在规则的最顶层将立即停止重写。
所以它看起来像这样:
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
# rewrite image requests
RewriteRule (.*\.(jpg|png|gif))$ public/img/$1 [L]
# rewrite all other requests to the front controller index.php
RewriteRule (.*) public/index.php?url=$1 [QSA,L]
优点:你永远不必担心循环,因为第二次立即以ENV检查结束 缺点:如果您碰巧需要创建循环规则,此方法将阻止它继续工作