1

我有简单.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]

一切正常(页面/编辑,用户/显示...),但是当我在 URL 上打开浏览器时,index/somethinga 会变空$_GET

请问哪里有问题?

4

2 回答 2

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 情况,其余的将被您的原始规则捕获。

于 2012-12-26T13:21:54.163 回答
0

服务器配置可能存在问题,因为“索引”可能是默认文件。所以路由是由于配置而不是由于htaccess而完成的。

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

于 2012-12-26T13:35:05.837 回答