regex - 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
解决方案
您可以将规则与使用PCRE 的分支重置组功能的正则表达式一起使用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?|([a-z]{2})|(?:([a-z]{2})/)?.*?([\w-]+))/?$ index.php?a=$1&b=$2 [L,QSA]
我已经在我的 Apache 中进行了测试,它运行良好。确保在测试时评论所有其他规则。
推荐阅读
- c# - 在 c# webforms 中,使用端口获取当前路径不返回端口
- apache-spark - 在 Aache Spark 2.4.4 中从 Hbase 获取数据时出现 FileNotFoundException
- python - python:如何在具有特定模式的目录中获取最新文件
- r - 计算R中的患者数量
- node.js - 使用 SAS (NODEJS) 从 azure blob 存储创建可共享 URI
- javascript - 在 Wordpress 联系人 7 中设置动态下拉字段
- sql - 在 oracle SQL 中使用 UTL_mail 包时,我可以在电子邮件正文中使用变量值吗
- python - NumPy 卷积定理
- javascript - intl.NumberFormat 显示 es-ES 货币格式的错误结果
- kotlin - 用 Mockito 在 Kotlin 中模拟队列似乎不起作用