内部重写的查询字符串显示在重定向中

时间:2013-10-19 15:10:23

标签: php apache .htaccess mod-rewrite redirect

我正在使用以下htaccess

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301]
    RewriteRule ^user/([^/]*)/$ /user/index.php?usr=$1

前三行将非www网址重定向到我网站的www ..

另一行重定向以用于规范目的,例如www.mysite.com/user/index.php?usr=JAHAJEE将成为www.mysite.com/user/JAHAJEE/

我的问题是在我将非www的上述重定向添加到www之后,规范重定向的页面显示了url参数(例如www.mysite.com/user/JAHAJEE/?usr=JAHAJEE)。请检查http://www.jahajee.com/user/JAHAJEE/& http://jahajee.com/user/JAHAJEE/

如何防止在重定向的网址中显示网址参数。谢谢你提前。

2 个答案:

答案 0 :(得分:7)

[R=301]会让mod_rewrite知道应该重定向请求,但请求不会立即重定向。它将评估规则,直到找到[L][END]标志(或者它到达文件的末尾)。它现在匹配第一个规则,并告诉我们当mod_rewrite准备就绪时,它应该重定向。 mod_rewrite尚未找到LEND标记,但仍有相匹配的规则。然后它将匹配第二个规则并将其包含在重定向中。

您需要将第一条规则的标记更改为[R=301,L]才能使其重定向。重定向的请求将再次调用此.htaccess,如果需要,将匹配第二个规则。然后它将再次作为内部重写正常工作。

答案 1 :(得分:0)

可能是您可以使用301或303重定向
永久性 301 303 暂时