我刚刚在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配置,但我无法理解......
答案 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。