由正则表达式引起的mod_rewrite 500内部错误

时间:2015-07-19 04:59:01

标签: regex .htaccess mod-rewrite

使用此功能时出现500内部错误:

RewriteRule ^(.*)$ /index.php?username=$1 [QSA]

经过一些研究后,我发现开头的正则表达式正在引发它,但我无法找到另一种解决方案。从本质上讲,我正试图让{' http://test.com/username'转到' http://test.com/index.php?username=username'

1 个答案:

答案 0 :(得分:1)

我不熟悉RewriteRule,但是关于你的正则表达式,$ 1是整个主题(http ... / username),而你似乎想要在最后一个实体上拆分这两个组件,例如:

^(.*\/)([^\/]*)$

第一个捕获组是贪婪的,所以将进入最后一个固定点 第二个捕获组捕获而不是固定结束主题。使用NOT-SOLIDUS而不是“。*”可能有点矫枉过正,但我​​不赞成不必使用点元字符,我更喜欢后者。但你肯定可以用点重写 - 在这种情况下,如果你想要最小化,你也可以放弃无关的锚点:(.*\/)(.*)

现在$ 1是http.../,$ 2是用户名,所以你可以重新格式化这样的行:

$1index.php?username=$2 [QSA]
PS:我从来没有习惯逃避固件而且从未遇到过PCRE for C的问题,但是我使用的正则表达式编辑器/测试工具(regex101),使用“pcre(php)”标记未转义的固相线作为错误,所以我在这里逃过了。您可能需要也可能不需要,但如果您这样做则不应该受到伤害,并且不需要它。它不像是不必要地逃避一个alpha,它可能是一个元字符序列并让你陷入困境。

相关问题