htaccess重定向与查询字符串失败

时间:2012-01-27 05:06:38

标签: apache .htaccess mod-rewrite redirect

尝试将带有查询字符串的网址重定向到子域名,但无法使其生效。

目标是让www.example.com/services/json?method=views.get成为old.example.com/services/json?method=views.get

我在.htaccess文件中:

RedirectMatch 301 ^www\.example\.com/services/json$ http://old.example.com/services/json$1

在Chrome中,它只停留在www域。

在Firefox中,它失败一次,说" Firefox检测到服务器正在以永远不会完成的方式重定向该地址的请求。"但是,如果我点击Try Again,它就会很好地进入子域。

这令人愤怒,任何帮助都表示赞赏。我尝试了几种不同的模式。

谢谢!

此外,查询字符串中有双引号。是否可以保留它们而不将它们编码为%2522

2 个答案:

答案 0 :(得分:4)

试试这个:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://old.example.com/$1 [R=301,L]

答案 1 :(得分:1)

我想出来了。以下是我为实现目标所做的工作:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^services/json(.*)$ http://old.example.com/services/json$1 [NE,L,R=301]

现在一切都很完美。

规则末尾的NE标记会根据需要在查询字符串中保留双引号,并且不对它们进行编码。