是什么导致这种奇怪的行为 mod_rewrite?

这是我的规则:

RewriteRule ^user/(\d+)$ rewrite.php?id=$1

它重定向

$_GET['id']

未安装。 如果我更改上述规则:

RewriteRule ^anything/(\d+)$ rewrite.php?id=$1

这是工作。 为什么一个有效,另一个不是?

以下是更多信息:

没有名为的目录

user

唯一的其他文件 .htaccess 层次结构是空的。


anything

可以用以外的任何东西所取代

user

.

刷新:

我检查了

rewritelog

它是空的。
已邀请:

涵秋

赞同来自:

这将会发生

MultiViews

包括 (部分 mod_negotiation). 如果一个 MultiViews 启用,您要求

/user

, 在哪里

/user.php

那么物理文件,那么 mod_negotiation 启动内部子查询

users.php

(他是“寻找”一个将返回正确的MIME类型的合适文件).

你需要关闭 MultiViews 在你的

.htaccess

文件:

Options -MultiViews

MultiViews 默认禁用 Apache, 但是,某些常见主人出于某种原因包括它。

小姐请别说爱

赞同来自:

我终于找到了这个问题的原因 ... 明显的 (这无处不记录,所以我可以找到), 如果您有文件 (在这种情况下 PHP)

与第一个虚拟目录相同的名称

覆盖规则不起作用。 (重定向周期,缺少参数等)

例如,以下规则:

#RewriteRule ^user/(\d+)$ user.php?id=$1 [L]

如果有一个名为的文件,将无法工作 user.php

在与文件的同一目录中 PHP

.

要回复问题请先登录注册