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

Regex 由正则表达式引起的mod_rewrite 500内部错误,regex,.htaccess,mod-rewrite,Regex,.htaccess,Mod Rewrite,使用此选项时,我遇到500个内部错误: RewriteRule ^(.*)$ /index.php?username=$1 [QSA] 经过一些研究,我发现一开始是正则表达式导致的,但我找不到其他解决方案。基本上,我试图让“转到”我不熟悉RewriteRule,但对于您的正则表达式,$1是整个主题(http…/username),而您似乎希望在最后一个solidus中拆分这两个组件,例如: ^(.*\/)([^\/]*)$ 第一个俘虏组是贪婪的,因此将进入最后一个索利多金币。 第二个捕获组捕

使用此选项时,我遇到500个内部错误:

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

经过一些研究,我发现一开始是正则表达式导致的,但我找不到其他解决方案。基本上,我试图让“转到”

我不熟悉RewriteRule,但对于您的正则表达式,$1是整个主题(http…/username),而您似乎希望在最后一个solidus中拆分这两个组件,例如:

^(.*\/)([^\/]*)$
第一个俘虏组是贪婪的,因此将进入最后一个索利多金币。
第二个捕获组捕获的是主体末尾的索利多金币,而不是索利多金币。使用NOT-SOLIDUS而不是“*”可能有些过分,但我非常喜欢不必要地使用点元字符,因此我更喜欢它而不是后者。但是你当然可以用点来重写它——在这种情况下,如果你选择最小值,你也可以去掉无关的锚定:
(.*\/)(.*

现在$1是http…/,而$2是用户名,因此您可以将行重新格式化如下:

$1index.php?username=$2 [QSA]

PS:我从未使用过转义solidus,也从未遇到过PCRE for C的问题,但是我使用的正则表达式编辑器/测试工具(regex101)使用“PCRE(php)”将未转义的solidus标记为错误,所以我在这里转义了它。你可能需要,也可能不需要,但如果你这样做了,而且不需要它,那么它应该不会造成伤害。这不像是在可能是元字符序列的情况下不必要地逃逸alpha而给您带来麻烦。

文件中还有其他内容吗?没有,但它说“重写规则^(.*)$会比闪电更快地触发500个错误。”如果文件中没有其他内容,然后您留下了我们最重要的第一行:
RewriteEngine On
“经过一些研究,我发现最初的正则表达式导致了它”—只是以间接方式;这里真正的错误可能是您创建了重定向循环。您需要排除
index.php
在“下一轮”中再次被重写。通常使用前面的
RewriteCond
来确保请求的URI与现有文件不匹配。