Php 不需要的mod_重写行为
我刚刚在ubuntu上重新安装了lamp stack,并为我的默认网站启用了mod_重写模块。我想要的是类似于drupal的查询,当整个查询字符串保存在一个变量中时。为此,可使用以下mod_重写代码:Php 不需要的mod_重写行为,php,apache,mod-rewrite,url-rewriting,Php,Apache,Mod Rewrite,Url Rewriting,我刚刚在ubuntu上重新安装了lamp stack,并为我的默认网站启用了mod_重写模块。我想要的是类似于drupal的查询,当整个查询字符串保存在一个变量中时。为此,可使用以下mod_重写代码: RewriteRule ^(.*)$ home.php?q=$1 [L,QSA] 当一些字符串以目录中已经存在的文件名开头时,问题就开始了; 例如,如果我打开一个页面:http://localhost/home/blablabla-$\u GET的内容如下: Array ( [q] =>
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]
当一些字符串以目录中已经存在的文件名开头时,问题就开始了;
例如,如果我打开一个页面:http://localhost/home/blablabla
-$\u GET的内容如下:
Array ( [q] => home.php )
我想看到的是:
Array ( [q] => home/blablabla )
我认为这是默认网站或mod_rewrite配置的问题,但我就是想不出来…这不完全是对你问题的回答,但这不正是服务器[“REQUEST_URI”]和服务器[“REDIRECT_URL”]的用途吗?你必须排除
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]
原因是:用户使用了新重写的URL。新的URL
home.php
也与表达式^(.*)$
相匹配。看起来您可能需要最近添加的[DPI]标志来丢弃路径信息,并多次对每个目录进行重写。使用上述命令排除现有文件(和目录)非常方便,在这种情况下,$\u GET显示为空…多视图可能导致此错误。尝试禁用它。看见