首页 > 解决方案 > .htaccess 使用获取参数重写 url

问题描述

我的 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 参数在 dump($_REQUEST)

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

但随着

Options +FollowSymlinks

RewriteEngine On

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

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

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

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

谢谢

标签: .htaccess

解决方案


添加此项以禁用多视图:

Options -MultiViews

mod_negotiation 上的Apache 文档描述了 Multiviews 选项在启用时的作用:

如果服务器收到对 /some/dir/foo 的请求并且 /some/dir/foo 不存在,则服务器读取目录以查找所有名为 foo.* 的文件,并有效地伪造一个类型映射,其中命名所有这些文件,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中之一。然后它选择最符合客户要求的匹配项,并返回该文档。

采用:

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

推荐阅读