在使用SetEnv时重用Apache环境variables

所以我设置了一个Apachevariables,我想使用该值来设置额外的variables。 这是可能的,我尝试了各种方法来获得这个工作

SetEnv URL_STATIC http://www.static.com 

不起作用

 SetEnv URL_STATIC_MORE %{ENV:URL_STATIC}/path/path 

也不工作:(

  SetEnv URL_STATIC_MORE ${URL_STATIC}/path/path 

理想情况下,当所有的说法和完成时,我想URL_STATIC_MORE是“ http://www.static.com/path/path ”。

更新:

啰嗦的原因,我想要做的是创build一个链接,我可以在HTML / SSI中使用。 我没有在我的服务器上的PHP,这不在我的控制之下。

所以,我想能够使用

 <a href="<!--#echo var="ONE_VARIABLE_FOR_URL" -->">blah</a> 

而不是

 <a href="<!--#echo var="ROOT_URL" --><!--#echo var="PATH_URL" -->">blah</a> 

再说一遍,我没有PHP可用,而且我必须为成千上万的页面做这个工作,所以把它放在.htaccess中是有道理的。 我也有多个根URL,所以我的configuration最终将如下所示:

 SetEnv URL_ROOT_CUSTSVC http://customerservice.company.com SetEnv URL_ROOT_CORPORATE http://corp.company.com SetEnv URL_ROOT_PRODUCTS http://products.company.com SetEnv URL_ROOT_CUSTSVC_1 ${URL_ROOT_CUSTSVC}/path/1 SetEnv URL_ROOT_CUSTSVC_2 ${URL_ROOT_CUSTSVC}/path/2 SetEnv URL_ROOT_CUSTSVC_3 ${URL_ROOT_CUSTSVC}/path/3 SetEnv URL_ROOT_CORPORATE_1 ${URL_ROOT_CORPORATE}/path/1 SetEnv URL_ROOT_CORPORATE_2 ${URL_ROOT_CORPORATE}/path/2 SetEnv URL_ROOT_CORPORATE_3 ${URL_ROOT_CORPORATE}/path/3 SetEnv URL_ROOT_PRODUCTS_1 ${URL_ROOT_PRODUCTS}/path/1 SetEnv URL_ROOT_PRODUCTS_2 ${URL_ROOT_PRODUCTS}/path/2 SetEnv URL_ROOT_PRODUCTS_3 ${URL_ROOT_PRODUCTS}/path/3 

环境variables仅适用于以下Apache模块:

  • mod_authz_host
  • mod_cgi一样
  • mod_ext_filter
  • mod_headers中
  • mod_include负责
  • mod_log_config
  • mod_rewrite的

它们不能用SetEnv调用,因为这是mod_env模块的指令。

更多信息: http : //httpd.apache.org/docs/2.2/env.html#using

似乎有一个解决方法使用mod_rewrite,虽然具体取决于您是否需要所有三个域的variables设置为所有请求,或只有当前域的variables:

 RewriteEngine on RewriteCond %{HTTP_HOST} ^(customerservice.company.com)$ RewriteRule .* - [E=URL_ROOT:http://%1,E=URL_PATH_1:http://%1/custserv/path/1,E=URL_PATH_2:http://%1/custserv/path/2,E=URL_PATH_3:http://%1/custserv/path/3] RewriteCond %{HTTP_HOST} ^(corp.company.com)$ RewriteRule .* - [E=URL_ROOT:http://%1,E=URL_PATH_1:http://%1/corp/path/1,E=URL_PATH_2:http://%1/corp/path/2,E=URL_PATH_3:http://%1/corp/path/3] RewriteCond %{HTTP_HOST} ^(products.company.com)$ RewriteRule .* - [E=URL_ROOT:http://%1,E=URL_PATH_1:http://%1/products/path/1,E=URL_PATH_2:http://%1/products/path/2,E=URL_PATH_3:http://%1/products/path/3] 

如果您需要为每个页面设置的所有variables(无论请求域如何),则只需交换相关主机名的%{HTTP_HOST},然后相应地重命名您的variables:

 RewriteEngine on RewriteCond customerservice.company.com ^(customerservice.company.com)$ RewriteRule .* - [E=URL_ROOT_CUSTSVC:http://%1,E=URL_PATH_CUSTSVC_1:http://%1/custserv/path/1,E=URL_PATH_CUSTSVC_2:http://%1/custserv/path/2,E=URL_PATH_CUSTSVC_3:http://%1/custserv/path/3] RewriteCond corp.company.com ^(corp.company.com)$ RewriteRule .* - [E=URL_ROOT_CORPORATE:http://%1,E=URL_PATH_CORPORATE_1:http://%1/corp/path/1,E=URL_PATH_CORPORATE_2:http://%1/corp/path/2,E=URL_PATH_CORPORATE_3:http://%1/corp/path/3] RewriteCond products.company.com ^(products.company.com)$ RewriteRule .* - [E=URL_ROOT_PRODUCTS:http://%1,E=URL_PATH_PRODUCTS_1:http://%1/products/path/1,E=URL_PATH_PRODUCTS_2:http://%1/products/path/2,E=URL_PATH_PRODUCTS_3:http://%1/products/path/3] 

不幸的是,这不是根据其他variables的值设置variables的最可读的方式。 如果您需要可读性,那么不幸的是需要某种types的脚本(PHP,perl,或者甚至shell,如果您有这种访问权限 – 您已经说过,您不需要)。

但是,嘿,如果可读性不是问题,这应该工作得很好!