我有以下正则表达式:
^(?:([a-z]{2})\/)?.*?(?:\/?([\w\-]+))$
这基本上意味着我要捕获两个字母的语言代码和斜杠后的最后一个字符串。
它使用来自其他问题的答案。我无法以相反的顺序返回比赛,因此已经为最后一场比赛解决了。
很遗憾,我的服务器返回了 500 Internal Server Error(内部服务器错误)。我测试了它,看起来它不像正则表达式中间的星*。
如果我插入.+
而不是.*
以下示例网址:
page
page/page1
page/page2/page3
en
en/page
en/page/page2
en/page/page2/page3
我希望比赛是
page
page1
page3
en
en & page
en & page2
en & page3
我不明白为什么*或+会使服务器崩溃。我找不到任何细节,所以希望有人可以阐明一下。
链接到Regex101:https://regex101.com/r/hW9eZ4/10
答案 0 :(得分:1)
您可以将规则与使用branch reset group feature of PCRE的正则表达式一起使用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?|([a-z]{2})|(?:([a-z]{2})/)?.*?([\w-]+))/?$ index.php?a=$1&b=$2 [L,QSA]
我已经在我的Apache中进行了测试,效果很好。在测试时,请确保注释所有其他规则。