Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不需要的mod_重写行为_Php_Apache_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 不需要的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] =>

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

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显示为空…多视图可能导致此错误。尝试禁用它。看见