【问题标题】:mod_rewrite with optional variable at the start of the URL在 URL 开头带有可选变量的 mod_rewrite
【发布时间】:2018-05-07 04:46:24
【问题描述】:

我想设置 mod_rewrite 来处理多种语言,但我无法让它正常工作。

我希望以下工作:

example.com/en/page/abc -> example.com/page.php?language=en&id1=abc example.com/en/page/abc/def -> example.com/page.php?language=en&id1=abc&id2=def

我的 .htaccess 文件如下所示:

 重写引擎开启

    重写规则 ^(.*)/page/(.*)/(.*) page.php?case=a1&language=$1&id1=$2&id2=$3
    RewriteRule ^(.*)/page/(.*) page.php?case=a2&language=$1&id1=$2

现在,如果我输入 url 'en/page/abc' 它可以正常工作,但如果我输入 'en/page/abc/def' 它会执行第二条规则并给出 'page.php' 作为语言和 'abc /def' 作为 id1 的变量。颠倒顺序仍然会给出“page.php”作为语言的值。有人建议如何解决这个问题?

【问题讨论】:

  • 试试([^/]*)而不是(.*)
  • [^/]* 似乎没有用,但谷歌搜索你的贡献将我带到了一个包含解决方案的页面。用 ([a-z]+) 替换第一个 (.*) 就可以了!
  • 如何将此问题标记为已解决?
  • 相信你可以回答并接受自己的回答
  • 最好有解释,以便其他人可以从中受益

标签: apache .htaccess mod-rewrite


【解决方案1】:

将第一个 (.*) 替换为 ([a-z]+) 就可以了。

我的 .htaccess 现在看起来像这样:

RewriteRule ^([a-z]+)/page/(.*)/(.*) page.php?language=$1&id1=$2&id2=$3 RewriteRule ^([a-z]+)/page/(.*) page.php?language=$1&id1=$2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多