我能以某种方式在.htaccess中选择环境变量吗?

时间:2017-03-02 07:19:43

标签: apache .htaccess mod-rewrite

我有一组使用mod_vhost_alias的apache(2.4.25)站点,因此一个vhost服务多个子域。

我希望能够设置一个环境变量,比如说

<VirtualHost _default_:443>`
ServerNameAlias *.whatever-it-is.com
SetEnv HOME_URL https://www.whatever-it-is.com/
# etc

然后在我的各个站点.htaccess文件中选择该变量。因此,站点可能允许访问子文件夹或特定文件,并将所有内容重定向回主站点。

php_flag engine off
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/?
RewriteCond %{REQUEST_URI} !^/myapp[/]?
RewriteCond %{REQUEST_URI} !^favicon.ico
RewriteRule (.*)  %{HOME_URL}  [R=301,L]
#                   ^--- not working, how would you do it?

然后在我需要在所有站点上更改home_url的情况下,我可以在vhost中应用它,并且几十个子域站点中的每一个都会将其接收。

*也尝试了

RewriteRule (.*)  %{ENV:HOME_URL}  [R=301,L]

http://httpd.apache.org/docs/2.0/env.html RewriteCond中的%{ENV:variable}形式的TestString允许mod_rewrite的重写引擎根据环境变量做出决定......

1 个答案:

答案 0 :(得分:1)

使用SetEnvIf设置环境变量,以便稍后在.htaccess中可用于mod_rewrite

内部VirtualHost配置就像这样:

SetEnvIf Host ^ HOME_URL=https://www.whatever-it-is.com/

然后在.htaccess里面有一个简单的规则:

RewriteEngine On

RewriteRule .* %{ENV:HOME_URL} [R=301,L]

确保在测试此更改之前清除浏览器缓存。