mod_rewrite 中的可选参数(漂亮的 url)

Posted

技术标签:

【中文标题】mod_rewrite 中的可选参数(漂亮的 url)【英文标题】:Optional Parameter in mod_rewrite (pretty url) 【发布时间】:2021-03-15 20:38:39 【问题描述】:

我正在尝试执行以下操作:

访问user.php?lang=$1&id=$2&title=$3

通过

en/user/1/tyler(英语)

user/1/tyler(无语言参数)

我的规则是:

RewriteRule ^(en)(?:/(user)/([0-9]+)/([a-zA-Z0-9-]*))?/?$ user.php?lang=$1&id=$2&title=$3 [L,QSA]

RewriteRule ^(user)/([0-9]+)/([a-zA-Z0-9-]*)?$ user.php?lang=&id=$1&title=$2 [L,QSA]

当我将语言 (en) 放在前面时它可以工作,我可以通过 $_GET 检索所有参数,但没有它就无法工作。

我怎样才能做到这一点?

谢谢

【问题讨论】:

【参考方案1】:

你可以试试这些规则:

Options -MultiViews
RewriteEngine On

RewriteRule ^(en)/user/(\d+)/([\w-]+)/?$ user.php?lang=$1&id=$2&title=$3 [L,NC,QSA]

RewriteRule ^user/(\d+)/([\w-]+)/?$ user.php?lang=&id=$1&title=$1 [L,NC,QSA]

关闭MultiViews 很重要,以避免在 Apache 中使用可能覆盖 mod_rewrite 规则的内容协商服务。

【讨论】:

是的,我的服务器对在不同文件夹中命名两个具有相同名称的文件感到困惑。将 user.php 更改为 profile.php 就可以了。感谢您为我指明正确的方向。祝你有美好的一天

以上是关于mod_rewrite 中的可选参数(漂亮的 url)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的可选参数[重复]

PHP函数中的可选参数不考虑顺序

参数 SwiftUI 中的可选绑定

TypeORM queryBuilder 中的可选参数

Mathematica 中的可选命名参数

可变参数后元组中的可选函数参数