.htaccess - .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
请你能解释一下第二条规则有什么问题吗?
谢谢
解决方案
添加此项以禁用多视图:
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]
推荐阅读
- twig - 用替换在树枝上添加字符
- python - 按钮的 padx 不是有意的?
- node.js - Sequelize 查询子结构
- javascript - 如果日期字段等于今天或自创建之日起 40 天内,则在平面列表中显示 Firestore 文档
- kubernetes - 使用 ansible 获取 k8s pod 列表
- vue.js - 为什么我的 Vue-router 没有路由到我的页面?
- java - Nifi 自定义 Kafka 处理器代码在有限的时间内工作
- python - 如何使用 numpy 数组对函数进行矢量化以消除循环
- tensorflow - 在 tf2.1.0-keras 中使用条件
- soap - 如何自动将 rpc/literal wsdl 转换为 document/literal