所以我设置了一个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模块:
它们不能用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,如果您有这种访问权限 – 您已经说过,您不需要)。
但是,嘿,如果可读性不是问题,这应该工作得很好!