URL 重写的奇怪行为

Strange behavior with URL rewriting

我正在尝试重写一些 url。所以我有一个 userAction.php 的页面,我将它重写为 /login/ 像这样

RewriteRule ^login/$ /userAction.php [L]

现在在该页面上登录我有两种形式 - 登录和注册。当用户完成注册并完成时,页面仍然是 userAction.php,但带有消息:userAction.php?action=joined。我想将其重写为 login?action=joined。这是我尝试过的,但它将我重定向到 404 错误

RewriteRule ^login?action=joined/$ /fun-second/userAction.php?action=joined [L]

所以这是全部.htaccess

RewriteRule ^login/$ /userAction.php [L]
RewriteRule ^login/?action=joined/$ /userAction.php?action=joined [L]

这是注册成功后的跳转

header('Location:  login/?action=joined/');
exit;

注意:正常情况下URL可以正常工作,没有问题。

您将使用 %{QUERY_STRING} 变量来匹配它。

RewriteEngine On

RewriteCond %{QUERY_STRING} ^(action=joined)$ [NC]
RewriteRule ^login/$ /userAction.php?%1 [NC,L]

RewriteRule ^login/$ /userAction.php [NC,L]

规则的顺序也很重要。或者,您可以尝试以下方法:

RewriteEngine On
RewriteRule ^login/$ /userAction.php [QSA,NC,L]

注意上面的 QSA 标志。