Options -Indexes
RewriteEngine on
Options +FollowSymLinks
RewriteRule ^$ 2012/index.php [L]
RewriteCond %{DOCUMENT_ROOT}/2012%{REQUEST_URI} -f
RewriteRule .* 2012/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* 2012/index.php$0 [QSA] #<-- this is wrong here, and gives 500 error
我正在尝试从2012子文件夹中提供所有网址。
我尝试了上面的脚本,但对于以下网址来说失败了:
index.php/admin/controller/action?id=123
应从子文件夹中解析
2012/index.php/admin/controller/action?id=123
出了什么问题?
答案 0 :(得分:0)
我猜猜URI /index.php/admin/controller/action?id=123
未通过%{DOCUMENT_ROOT}/2012%{REQUEST_URI}
的-f测试,而是被最后一条规则:RewriteRule .* 2012/index.php?q=$0 [QSA]
四舍五入,将URI转为/2012/index.php?q=index.php/admin/controller/action&id=123
。你必须为此添加一个特例,因为第一个条件/规则允许现有文件按原样重写,最后一个条件/规则充当“全能”(并且第一条规则就是对于请求URI为/
)的特殊情况。尝试这样的事情:
RewriteRule ^$ 2012/index.php [L]
RewriteCond %{REQUEST_URI} ^/index\.php [OR]
RewriteCond %{DOCUMENT_ROOT}/2012%{REQUEST_URI} -f
RewriteRule .* 2012/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* 2012/index.php?q=$0 [QSA]
如果以RewriteCond %{REQUEST_URI} ^/index\.php [OR]
开头的请求并且URI按原样重写到/ 2012 /目录中,则将满足新条件/index.php
。 [OR] 可确保遵循以前的直接访问条件。