【问题标题】:Use variable in RewriteCond match在 RewriteCond 匹配中使用变量
【发布时间】:2016-11-10 13:26:40
【问题描述】:

我在 2 个环境中运行网站:生产和开发。

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

vhosts.conf(开发服务器)

RewriteRule .* - [E=DEV_OR_WWW:dev]

vhosts.conf(生产服务器)

RewriteRule .* - [E=DEV_OR_WWW:www]

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

.htaccess

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

但是上面的 RewriteCond 不起作用。 %{ENV:DEV_OR_WWW}wwwdev 不匹配,并且不应用规则。如何使用变量来匹配 HTTP_HOST?

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

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您可以使用以下内容:

    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_HOST} 位于旧域上时才应应用它。在第二行尝试了这个:RewriteCond %{HTTP_HOST} ^(www|dev)\.olddomain\.com$ [NC] 但它也没有工作:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多