0

好的,说我的博客站点myurl.org与一个单独的域的链接一样多:

old.myurl.org?oldvar=foo

只是old.myurl.org不再存在并被new.myurl.org.

如果查询字符串 vars 在 上相同new.myurl.org,我相信我可以.htaccess使用以下方法重写:

RewirteCond %{http_host} ^old.myurl.org$ [NC]
RewriteRule ^(.*)$ new.myurl.org [L,R=301,QSA]

唯一的问题是我还需要将查询字符串 var 从更改oldvarnewvar并保留它的数据 (foo)。

有很多关于如何以不同方式重写查询字符串变量的示例,但我似乎找不到这种情况的示例。

我需要重写:

old.myurl.org?oldvar=foo

至:

new.myurl.org?newvar=foo

编辑

此外,我有几个潜在的查询字符串键值需要考虑,但并非所有都将始终存在。

所以我可能需要:

old.myurl.org?oldvar=foo&oldvar2=bar --> new.myurl.org?newvar=foo&newvar2=bar

或者

old.myurl.org?oldvar2=bar --> new.myurl.org?newvar2=bar

这甚至可能是不可能的,但在一种情况下,我需要去掉部分查询字符串值。所以?oldvar=foo{term}可能需要成为?newvar=foo

再次感谢!

4

1 回答 1

1

第一个条件匹配域,第二个条件匹配查询字符串,规则将匹配您的域根:

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar=%1 [R=301,L]

您也可以放置多个查询字符串:

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$ [OR]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)&oldvar2=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar=%1&newvar2=%2 [R=301,L]

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar2=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L]

要使用x/y/z您在评论中提到的路径,您可以更改RewriteRule例如我们当前使用的规则,只会从以下重定向yourdomain.com/?...

RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L]

如果你想捕捉不同的路径,你可以这样做:

RewriteRule ^x/?$ http://new.myurl.org/?newvar2=%1 [R=301,L]

以上将捕获yourdomain.com/x?...yourdomain.com/x/?...

您也可以拥有多个路径并使用如下 OR 条件:

RewriteRule ^(x|x/y|x/y/z)/?$ http://new.myurl.org/?newvar2=%1 [R=301,L]

上面的意思是我们要匹配x/?...OR x?...ORx/y?...x/y/?...OR x/y/z?...ORx/y/z/?...

通过将其封装在括号中并使用|as 分隔符和 OR。

^and$表示从头到尾匹配,因此当它不包含任何内容时表示不匹配,这表示根文件夹,domain.com/当有内容时,它将匹配例如内容domain.com/x或您放入其中的任何内容。

于 2013-08-01T20:42:48.693 回答