2017-03-02 85 views
1

我有一组使用mod_vhost_alias的apache(2.4.25)站点,因此一个虚拟主机服务多个子域。我可以以某种方式选择.htaccess中的环境变量吗?

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

<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的情况下,我可以将其应用于虚拟主机和每个子域数十家网站将它捡起来。

*也试过

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

http://httpd.apache.org/docs/2.0/env.html 的%{ENV:变量}的TestString中的RewriteCond的形式允许的mod_rewrite的重写引擎作出对环境变量的条件......

+0

'重写规则(。*)%{ENV:HOME_URL} [R = 301,L]'? – Cyclonecode

+0

也试过'RewriteRule(。*)%{ENV:HOME_URL} [R,L]',按照http://stackoverflow.com/a/7749784/1238884 - 仍然无法正常工作。结束于一个重定向循环,好像环境变量没有被设置(这是,因为我可以从php中看到它) – frumbert

回答

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] 

确保测试这种变化之前,清除浏览器缓存。

+2

好吧,它看起来不像我已经尝试过,但现在这是为我的子域名工作 – frumbert

相关问题