.htaccess 如何使重写工作?

.htaccess 如何使重写工作?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我得到了这个URL:host.com/john?result=success 我需要将其内部重写为:host.com/?name=john&result=success 尝试了以下方法:重写规则^[a-zA-Z0-9]+|/?$index.php?name=$1[QSA] 并且它只将其重写为:host.com/?name=john-&result=success在本例中丢失 据我所知,[QSA]也应该保留原始查询字符串,但它会丢失 在这件事上,我们非常感谢所有的帮助 [编辑]: 这是我的完全访问

我得到了这个URL:host.com/john?result=success

我需要将其内部重写为:host.com/?name=john&result=success

尝试了以下方法:重写规则^[a-zA-Z0-9]+|/?$index.php?name=$1[QSA]

并且它只将其重写为:host.com/?name=john-&result=success在本例中丢失

据我所知,[QSA]也应该保留原始查询字符串,但它会丢失

在这件事上,我们非常感谢所有的帮助

[编辑]:

这是我的完全访问权限,我只是绕过了此规则之前的一个文件夹:

RewriteEngine on
RewriteBase /

RewriteRule ^(admin) - [L]
RewriteRule ^([a-zA-Z0-9]+|)/?$ index.php?name=$1 [QSA]

你的正则表达式似乎有问题

试试这个:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9]+)/?$ index.php?name=$1 [L,QSA]

这里的结果相同result=success已丢失此.htaccess中是否还有其他规则?您认为确保请求的不是文件或文件夹会使重写代码正常工作吗?删除| after 0-9]+也没什么变化。嗯,你的代码看起来和我的不同。我使用了[L,QSA]标志,alsoQSA在原始问题中说明了这一点,但没有帮助,我只是在比赛中让它停下来,没有多大区别。我刚刚在我的环境中测试了RewriteRule^[a-zA-Z0-9]+|/?$index.php?name=$1[QSA],它可以按预期工作。查询字符串的结果是name=john&result=success。您的环境或PHP脚本肯定还有其他问题。您是对的,我有额外的PHP处理,从查询字符串中剥离result=success。这个问题现在已经解决了。谢谢。不知道如何将注释标记为正确答案。很高兴知道它起了作用,但^[a-zA-Z0-9]+|/?$仍然不是正确的正则表达式,因为它也将匹配空字符串,因此将重写http://example.com/ 到http://example.com/?name= 给你一个空的GET变量。一个空变量就可以了,我可以稍后用PHP验证它。