我如何在.htaccess文件中定义variables并使用它?

我已经为我的网站定义了这个代码的htaccess文件:

RewriteEngine on RewriteBase / RewriteRule ^bit_auth\/?(.*)$ /cig/base3/auth/$1 [R=301,NC,L] RewriteCond $1 !^(index\.php|images|robots\.txt|assets|themes|includes) RewriteRule ^(.*)$ /cig/base3/index.php/$1 [L] 

我想保持我的网站根path在这样的variables

 RewriteEngine on RewriteBase / SetEnv BASE_PATH "/cig/base3" RewriteRule ^bit_auth\/?(.*)$ %{ENV:BASE_PATH}/auth/$1 [R=301,NC,L] RewriteCond $1 !^(index\.php|images|robots\.txt|assets|themes|includes) RewriteRule ^(.*)$ %{ENV:BASE_PATH}/index.php/$1 [L] 

因为我可能需要稍后使用更多的代码中的BASE_PATH值,也可能会更改,我不想每次在我的htaccess文件中search和replace。 但是,当我使用上面的代码, 在htaccess文件%{ENV:BASE_PATH}返回一个空值而不是预期的/cig/base3在PHP中,当我打电话使用:

 <?php $specialPath = getenv('BASE_PATH'); var_dump($specialPath)?> 

它显示/cig/base3的正确值。

我的代码有什么问题,我该如何解决这个问题?

您不能以这种方式使用SetEnv ,因为它尚未处理。

这个指令设置的内部环境变量是在大多数早期的请求处理指令运行之后设置的,比如访问控制和URI到文件名的映射。 如果您正在设置的环境变量是输入到处理的早期阶段(如RewriteRule指令)的输入,则应该使用SetEnvIf设置环境变量。

你正在寻找的是setenvif而不是setenvif

所以你应该可以做类似的事情

 SetEnvIf Request_URI "^.*" base_path=/cig/base3 

http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif