我们正在转移到另一个域,并希望重定向所有旧流量:
en.site1.com/whatever >>> en.site2.com/whatever
cz.site1.com/whatever >>> cz.site2.com/whatever
fr.site1.com/whatever >>> fr.site2.com/whatever
# ...and so on
我们目前正在使用.htaccess进行重定向,因此我们更倾向于使用该解决方案。 RewriteRule本身没有看到域名(* .example.com),所以我们必须使用RewriteConds:
RewriteCond %{HTTP_HOST} en.site1.com
RewriteRule ^(.*)$ http://en.site2.com/$1 [R=301]
RewriteCond %{HTTP_HOST} cz.site1.com
RewriteRule ^(.*)$ http://cz.site2.com/$1 [R=301]
RewriteCond %{HTTP_HOST} fr.site1.com
RewriteRule ^(.*)$ http://fr.site2.com/$1 [R=301]
# ...and so on
为每种X支持的语言执行此操作过于冗长。我想象一个使用正则表达式或其他东西的解决方案,而不是列出所有语言:
# $0 is the regex match from RewriteCond
RewriteCond %{HTTP_HOST} ^(.*).site1.com
RewriteRule ^(.*)$ http://$0.site2.com/$1 [R=301]
这可能吗?或者.htaccess中是否还有其他方法不包含广泛的copypasting?
答案 0 :(得分:1)
你可以从RewriteCond
捕获正则表达式变量,其方式与RewriteRule
的方式非常相似。
当您反向引用捕获的变量时,语法的差异在于您使用%
而不是$
。
例如而不是:
RewriteCond %{HTTP_HOST} en.site1.com
RewriteRule ^(.*)$ http://en.site2.com/$1 [R=301]
RewriteCond %{HTTP_HOST} cz.site1.com
RewriteRule ^(.*)$ http://cz.site2.com/$1 [R=301]
RewriteCond %{HTTP_HOST} fr.site1.com
RewriteRule ^(.*)$ http://fr.site2.com/$1 [R=301]
你可以使用:
RewriteCond %{HTTP_HOST} ([a-z]{2}).site1.com
RewriteRule ^(.*)$ http://%1.site2.com/$1 [R=301]
答案 1 :(得分:0)
用于多个子域重定向特定的特定路径重定向。 请在您的.htaccess文件中添加以下代码。
RewriteCond %{HTTP_HOST} abc.com$ [NC]
RewriteRule ^ abcd.com%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{HTTP_HOST} ab.com$ [NC]
RewriteRule ^ abs.com%{REQUEST_URI} [R=301,L,NE]