首页 > 解决方案 > Htaccess + regex - 服务器返回 500 内部服务器错误

问题描述

我有以下正则表达式:

^(?:([a-z]{2})\/)?.*?(?:\/?([\w\-]+))$

这基本上意味着我想捕获两个字母的语言代码和斜线后面的最后一个字符串。

它使用来自不同问题的答案。我无法以相反的顺序返回比赛,所以最后一场比赛已解决。

不幸的是,我的服务器返回500 Internal Server Error。我对其进行了测试,它看起来不喜欢正则表达式中间的星号 *。

它也不喜欢.+我插入它而不是.*

以下示例 URL:

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

标签: regex.htaccess

解决方案


您可以将规则与使用PCRE 的分支重置组功能的正则表达式一起使用:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?|([a-z]{2})|(?:([a-z]{2})/)?.*?([\w-]+))/?$ index.php?a=$1&b=$2 [L,QSA]

正则表达式演示

我已经在我的 Apache 中进行了测试,它运行良好。确保在测试时评论所有其他规则。


推荐阅读