基本上,我一直在为网站迁移安排多个重定向。但是,在我的工作中,我们有多个服务器用于测试/开发/生产。域通常映射如下:
http://<accountname>.(test|dev|).<maindomain>.edu.au
对于内部重定向,维护对适当服务器的引用没有问题。但是,当我们在站点上执行迁移到另一个帐户时,要确保重定向保留在适当的服务器上变得有点困难。
例如,假设我们决定将“foo”帐户重定向到“bar”,用于我的公司名为“foobar”。
Foo's production URL: http://foo.foobar.edu.au
Foo's test URL: http://foo.test.foobar.edu.au
Foo's development URL: http://foo.dev.foobar.edu.au
Bar's production URL: http://bar.foobar.edu.au
Bar's test URL: http://bar.test.foobar.edu.au
Bar's development URL: http://bar.dev.foobar.edu.au
基本上我需要编写 htaccess 文件,以便所有请求foo
都正确映射到bar
的test/dev/production
域。
我目前实现这一点的方法是使用 RewriteCond 并捕获一些用于重定向的服务器信息:
RewriteCond %{SERVER_NAME} ^foo(\.test|\.dev|\.)foobar.edu.au
RewriteRule ^(.*)$ http://bar%1foobar.edu.au/$1
这适用于批量重定向。但是,当我需要稍微花哨一点时(即,并非所有foo
' 目录都匹配完全相同的路径bar
并需要单独的重定向),我发现我需要RewriteCond
为每个新目录复制相同的RewriteRule
内容(因为您不能将 aRewriteCond
应用于多个RewriteRule
,同时仍在捕获数据。
例如:
# resources/data has been duplicated on bar
RewriteCond %{SERVER_NAME} ^foo(\.test\.|\.dev\.|\.)foobar.edu.au
RewriteRule ^(resources/data/.+)$ http://bar%1foobar.edu.au/$1 [R=301,L]
# the rest of foo just points to a static page on bar
RewriteCond %{SERVER_NAME} ^foo(\.test\.|\.dev\.|\.)foobar.edu.au
RewriteRule ^ http://bar%1foobar.edu.au/migration/foo.cfm [R=301,L]
# there are actually more, but removed for brevity
TL;DR
有没有一种直接的方法来捕获SERVER_PATH
变量的一部分并在多个RewriteRule
's 中使用它?
我是 mod_rewrite 的新手,所以任何帮助都将不胜感激。
谢谢,
J