【问题标题】:Optional Parameter in mod_rewrite (pretty url)mod_rewrite 中的可选参数(漂亮的 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 检索所有参数,但没有它就无法工作。

我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案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 就可以了。感谢您为我指明正确的方向。祝你有美好的一天
    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2011-03-09
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2010-11-01
    相关资源
    最近更新 更多