Apache ENV var未在mod_rewrite规则中设置

时间:2011-12-02 00:08:23

标签: apache mod-rewrite

我的.htaccess中有以下规则:

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond $1 !^index\.php$
    RewriteRule ^(.*)$ index.php?q=$1 [L]
</IfModule>

这将查询字符串值q设置为请求uri(在index.php所在的目录之前删除任何前面的目录)。

例如:http://localhost/framework/testing设置q=testing

我想更改此设置,以便不是设置查询字符串,而是设置环境变量。我尝试了以下但它不起作用(环境var没有设置):

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond $1 !^index\.php$
    RewriteRule ^(.*)$ index.php [ENV=request:$1,L]
</IfModule>

奇怪的是,如果请求以index.php开头,环境变量将被设置,例如:http://localhost/framework/index.php/testing设置q=index.php/testing

2 个答案:

答案 0 :(得分:2)

使用PATH_INFO(正如@chrono所建议的)和稍微不同的mod_rewrite规则我已按要求工作了!

修改.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond $1 !^index\.php
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

答案 1 :(得分:0)

我认为,您实际需要的是PATH_INFO - 如下所述:What exactly is PATH_INFO in PHP?

除非有其他原因,否则无需重新发明轮子。