重写规则忽略/索引

时间:2012-12-26 13:10:33

标签: php apache mod-rewrite

我有简单的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(?!/static/).+ [NC]
RewriteCond %{REQUEST_URI} ^(?!/media/).+ [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?query=$1 [L]

一切正常(页面/编辑,用户/展示...),但当我在网址index/something上打开浏览器时,它将变为空$_GET

请问哪里有问题?

2 个答案:

答案 0 :(得分:1)

您当前的重写规则不考虑/ index / something的情况。如果您只是使用/ something,那么它将被重定向到index.php?query = something。尝试添加此规则:

RewriteRule ^index/(.*)$ index.php?query=$1 [L]

编辑: 基于这些评论,我们看到Apache正在使用/ index作为/index.php的别名。作为临时解决方法,直到您找到Apache配置所需的更改,您可能会这样做:

RewriteRule ^index/(.*)$ index.php?query=index/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?query=$1 [L]

将第一条规则置于RewriteCond线之前将捕获/ index情况,其余部分将被原始规则捕获。

答案 1 :(得分:0)

服务器配置可能存在问题,因为“index”可能是默认文件。因此,由于配置而不是由于htaccess,路由正在完成。

尝试检查Apache将哪些文件名视为有效的默认名称。另外,如果将/index(.*)作为单独的RewriteRule添加会发生什么?