1
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

怎么了?

4

1 回答 1

0

我猜测 URI/index.php/admin/controller/action?id=123未通过 -f 测试%{DOCUMENT_ROOT}/2012%{REQUEST_URI},而是被最后一条规则: 取整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]如果发出请求,/index.php并且 URI 按原样重写到 /2012/ 目录中,则将满足新条件。[OR]确保遵循直接访问的先前条件。

于 2012-04-08T22:36:38.070 回答