.htaccess的url用get参数重写

时间:2019-02-28 20:15:40

标签: .htaccess

我的htaccess出现问题,这会让我完全发疯。

我想用event / 158替换event.php?id = 158 和event.158?documents中的event.php?id = 158&display = documents

我已经找到了很多这样做的例子,但是如果万一,那是行不通的,我也不明白为什么。

如果我的规则是

Options +FollowSymlinks

RewriteEngine On

RewriteRule ^event([0-9]+)$  event.php?id=$1  [L]

然后id参数在转储($ _REQUEST)中

Array ( [id] => 158 [SERVERID94994] => 134038 [PHPSESSID] => 70ed00f7c3854afa31a0d8d5d4a02840 )

但是

Options +FollowSymlinks

RewriteEngine On

RewriteRule ^event/([0-9]+)$  event.php?id=$1  [L]

然后$ _REQUEST中的id参数不再可用

Array ( [SERVERID94994] => 134038 [PHPSESSID] => 70ed00f7c3854afa31a0d8d5d4a02840 ) 
=> Missing id

请您解释一下第二条规则有什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

添加此项以禁用MultiViews:

Options -MultiViews

Apache docs on mod_negotiation描述了启用多视图选项后的功能:

  

如果   服务器收到对/ some / dir / foo的请求,而/ some / dir / foo没有   存在,然后服务器读取目录以查找所有名为   foo。*,并有效地伪造了一个将所有这些命名的类型映射   文件,为其分配相同的媒体类型并对其进行内容编码   如果客户要求提供其中一个姓名,则将具有。然后   选择最符合客户要求的匹配项,然后返回   文档。

使用:

options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteRule ^event/([0-9]+)$  event.php?id=$1  [L]