URL重写的奇怪行为

时间:2015-10-05 11:39:31

标签: apache .htaccess mod-rewrite url-rewriting

我正在尝试重写一些网址。所以我的页面为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;

注意:正常的网址正常,没有问题。

1 个答案:

答案 0 :(得分:1)

您可以使用%{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标记。