Apache 带有查询字符串的htaccess重定向失败

Apache 带有查询字符串的htaccess重定向失败,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,试图将带有查询字符串的URL重定向到子域,但无法使其正常工作 目标是使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中,它只是停留

试图将带有查询字符串的URL重定向到子域,但无法使其正常工作

目标是使
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检测到服务器正在以一种永远不会完成的方式重定向对该地址的请求。”但如果我再次点击“重试”,它将进入子域

这令人愤怒,任何帮助都是值得感激的。我试过几种不同的模式

谢谢

此外,查询字符串中还有双引号。是否可以在不将它们编码为
%2522
的情况下保留它们?

尝试以下操作:

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

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

我明白了。下面是我为让它工作所做的:

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


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

我发现了这一点。下面是我为让它工作所做的:

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


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

不应该有
$1
。不应该有
$1
。修改它以执行我需要的操作:RewriteCond%{HTTP\u HOST}^www\.example\.com/services/json$[NC]RewriteRule^(.*)[R=301,L]但它不起作用。它只是停留在www域上。所以它不起作用,似乎不影响任何东西。修改它以执行我需要的操作:RewriteCond%{HTTP_HOST}^www\.example\.com/services/json$[NC]RewriteRule^(.*)$[R=301,L],但它不起作用。它只是停留在www域上。所以它不起作用,似乎不会影响任何事情。