.htaccess 在重写条件匹配中使用变量

.htaccess 在重写条件匹配中使用变量,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我在两个环境中运行一个站点:生产和开发 每个服务器都有一个vhosts.conf文件,用于设置环境变量。其中一个变量是要使用的正确子域 vhosts.conf(开发服务器) vhosts.conf(生产服务器) 我还有一个.htaccess文件,在两台服务器上都是相同的。我试图将旧域URL重写为新域URL,同时保留子域,如下所示: .htaccess RewriteCond "%{HTTP_HOST}" "%{ENV:DEV_OR_WWW}\.olddomain\.com" [NC] Rewri

我在两个环境中运行一个站点:生产和开发

每个服务器都有一个
vhosts.conf
文件,用于设置环境变量。其中一个变量是要使用的正确子域

vhosts.conf(开发服务器)

vhosts.conf(生产服务器)

我还有一个
.htaccess
文件,在两台服务器上都是相同的。我试图将旧域URL重写为新域URL,同时保留子域,如下所示:

.htaccess

RewriteCond "%{HTTP_HOST}" "%{ENV:DEV_OR_WWW}\.olddomain\.com" [NC]
RewriteRule "^/(.*)"  "http://%{ENV:DEV_OR_WWW}.newdomain.com/$1" [L,R=301]

但上面的重写条件不起作用<代码>%{ENV:DEV_或WWW}与
WWW
DEV
不匹配,因此未应用该规则。如何使用变量来匹配HTTP_主机


如果您需要更多详细信息,或者我的问题不清楚,请提问。

您可以使用以下选项:

RewriteCond %{ENV:DEV_OR_WWW} ^(.+)$
RewriteCond %1.olddomain.com ^(www|dev)\.olddomain\.com$ [NC]
RewriteRule /(.*) http://%1.newdomain/$1 [L,R=301]

您可以使用以下选项:

RewriteCond %{ENV:DEV_OR_WWW} ^(.+)$
RewriteCond %1.olddomain.com ^(www|dev)\.olddomain\.com$ [NC]
RewriteRule /(.*) http://%1.newdomain/$1 [L,R=301]

谢谢你的回答,@starkeen。很好的技巧,使用
(www | dev)
。我正在尝试,稍后再与您联系。如果您在.htaccess上下文上进行测试,请从重写规则的模式中删除前导斜杠。关于斜杠,您是对的。但是,它不工作(错误:重定向太多)。我猜这是因为这条规则适用于每个请求。仅当
%{HTTP\u HOST}
位于旧域上时,才应应用此选项。我在第二行写了这个:
RewriteCond%{HTTP\u HOST}^(www | dev)\.olddomain\.com$[NC]
,但它也不起作用:(谢谢你的回答,@starkeen.Nice技巧,使用
(www | dev)
。我正在尝试,稍后再与您联系。如果您在.htaccess上下文上进行测试,请从rewriterule的模式中删除前导斜杠。关于斜杠,您是对的。但是,它不起作用(错误:重定向太多)。我猜这是因为该规则应用于每个请求。只有当
发生错误时,才应应用该规则{HTTP\u HOST}
位于旧域上。我在第二行尝试了此操作:
RewriteCond%{HTTP\u HOST}^(www | dev)\.olddomain\.com$[NC]
,但它也不起作用:(
RewriteCond %{ENV:DEV_OR_WWW} ^(.+)$
RewriteCond %1.olddomain.com ^(www|dev)\.olddomain\.com$ [NC]
RewriteRule /(.*) http://%1.newdomain/$1 [L,R=301]