好的,请说我的博客网站myurl.org
指向一个单独的域名的链接:
old.myurl.org?oldvar=foo
只有old.myurl.org
不再存在,并且已被new.myurl.org
替换。
如果new.myurl.org
上的查询字符串变量相同,我相信我可以使用以下内容从.htaccess
重写:
RewirteCond %{http_host} ^old.myurl.org$ [NC]
RewriteRule ^(.*)$ new.myurl.org [L,R=301,QSA]
唯一的问题是我还需要将查询字符串var从oldvar
更改为newvar
并保留其数据(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
再次感谢!
答案 0 :(得分: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/?...
重定向,即:< / p>
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/?...
或x?...
或x/y?...
和x/y/?...
或x/y/z?...
或x/y/z/?...
通过将其封装在括号上并使用|
作为分隔符和OR。
^
和$
表示从开始到结束匹配,因此当它包含任何内容时意味着不匹配任何意味着根文件夹domain.com/
,当有内容时它将匹配内容实例domain.com/x
或其中的任何内容。