更新:

更新:

因此,我设置了一个 apache 变量,我想使用该值来设置其他变量。这是可能的,我尝试了各种方法来实现这一点

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' 当一切已经说过并且做完了。

更新:

我之所以要这么做,是想创建一组可以在 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,因此我的配置最终将如下所示:

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

答案1

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

他们不能被调用,SetEnv因为这是mod_env模块。

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

答案2

似乎有一种使用 mod_rewrite 的解决方案,但具体方法取决于您是否需要为所有请求设置所有三个域的变量,还是仅设置当前域的变量:

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]

如果您需要为每个页面设置所有变量,而不管请求域如何,只需将 %{HTTP_HOST} 替换为相关主机名,然后相应地重命名变量:

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]

不幸的是,这不是根据其他变量的值设置变量的最易读的方法。如果您需要可读性,那将需要某种脚本(PHP、perl,或者甚至是 shell,如果您有这种访问权限 - 您已经说过您没有)。

但是,如果可读性不是问题的话,这应该可以正常工作!

相关内容