【问题标题】:Can I pick of environment variables inside .htaccess somehow?我可以以某种方式在 .htaccess 中选择环境变量吗?
【发布时间】:2017-07-21 19:18:56
【问题描述】:

我有一组使用 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,我可以将它应用到虚拟主机中,然后几十个子域站点中的每一个都会选择它。

* 也试过了

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

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

【问题讨论】:

  • RewriteRule (.*) %{ENV:HOME_URL} [R=301,L]?
  • 也尝试了RewriteRule (.*) %{ENV:HOME_URL} [R,L],根据stackoverflow.com/a/7749784/1238884 - 仍然无法正常工作。以重定向循环结束,好像没有设置环境变量(它是,我可以从 php 中看到)

标签: apache .htaccess mod-rewrite


【解决方案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]

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

【讨论】:

  • 嗯,它看起来与我已经尝试过的并没有太大不同,但现在它适用于我的子域
  • @frumbert 这个问题有更多描述性的答案here
猜你喜欢
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2023-03-18
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多