不需要的mod_rewrite行为

时间:2009-05-07 11:10:00

标签: php apache mod-rewrite url-rewriting

我刚刚在ubuntu上安装了一个新的灯堆,并为我的默认网站启用了mod_rewrite模块。当整个查询字符串保存在一个变量中时,我想要的是类似于drupal的查询。为此,可以使用以下mod_rewrite代码:

RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

当一些字符串以目录中已存在的文件名开头时,问题就开始了; 例如,如果我打开一个页面:http://localhost/home/blablabla - $ _GET的内容如下:

Array ( [q] => home.php ) 

我想看到的是:

Array ( [q] => home/blablabla ) 

我认为这是默认网站或mod_rewrite配置,但我无法理解......

3 个答案:

答案 0 :(得分:2)

您必须排除home.php

RewriteCond %{REQUEST_URI} !^/home\.php$
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

或者您排除所有现有文件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

原因:L flag causes an internal redirect带有新的重写网址。新网址home.php也与表达式^(.*)$匹配。

答案 1 :(得分:0)

完全回答你的问题,但不是_SERVER [“REQUEST_URI”]和_SERVER [“REDIRECT_URL”]的用途?

答案 2 :(得分:0)

看起来您可能需要最近添加的[DPI]标志来丢弃具有多个每个目录重写的PATH_INFO。