.htaccess htaccess重定向循环

.htaccess htaccess重定向循环,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在努力使我的URL看起来“更好”。而不是x.com/reset password/?email=name@x.com,我希望它是x.com/reset-password/name@x.com 使用mod_rewrite,我已经让它对所有相关的字符串都有效,除了带句点(.)的字符串。当我在RewriteRule语句中允许点时,会发生一个内部服务器错误。我认为这是因为即使应用了L标志,它也必须最后一次重定向到新的目的地,因此进入无限循环,因为我的正则表达式太宽松了 我试图使用RewriteCon

我正在努力使我的URL看起来“更好”。而不是x.com/reset password/?email=name@x.com,我希望它是x.com/reset-password/name@x.com

使用mod_rewrite,我已经让它对所有相关的字符串都有效,除了带句点(.)的字符串。当我在RewriteRule语句中允许点时,会发生一个内部服务器错误。我认为这是因为即使应用了L标志,它也必须最后一次重定向到新的目的地,因此进入无限循环,因为我的正则表达式太宽松了

我试图使用RewriteCond来阻止任何带有等号的URI重定向,从而解决无限循环问题,但它没有正确应用。我想我要的是两种解决方案中的一种:要么在原始正则表达式中包含句点,要么阻止对带有=的URI求值

原始正则表达式:

RewriteRule ^([^.]+)$ ?email=$1 [L]
修改后的一个:

RewriteCond %{REQUEST_URI} ^[^=]+$  
RewriteRule ^(.+)$ ?email=$1 [L]

我知道在线上有很多regex/htaccess教程(我花了几个小时阅读了它们…),但我似乎无法理解。感谢您的帮助

您应该使用
查询字符串
而不是
请求URI
,因为
=
查询字符串
中:

RewriteCond %{QUERY_STRING} ^[^=]+$  
RewriteRule ^(.+)$ ?email=$1 [L]

我为迟来的回复道歉,但我想在回复之前确保我没有犯任何其他错误。这一变化似乎没有什么不同。无论目录后面是什么,使用此文件都会导致内部服务器错误。默认配置中是否有需要更改的内容?有更简单的解决方案吗?我基本上只想添加?email=到URL上的任何内容,然后停止重定向。