我为我的网站定义了一个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]
我希望将我的网站根路径保存在变量中,如下所示:
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文件中搜索和替换。
但是当我使用上面的代码时,htaccess文件%{ENV:BASE_PATH}
中的返回一个空值而不是预期的/cig/base3
,但是当我使用以下代码调用它时 >
<?php $specialPath = getenv('BASE_PATH'); var_dump($specialPath)?>
显示/cig/base3
的正确值。
我的代码中存在问题,我该如何解决?
答案 0 :(得分:9)
您无法使用SetEnv
,因为它尚未处理。
此指令设置的内部环境变量在之后设置 运行大多数早期请求处理指令,例如访问 控制和URI到文件名的映射。如果是环境变量 您的设置意味着作为此早期处理阶段的输入 比如RewriteRule指令,你应该改为设置 使用SetEnvIf的环境变量。
您要找的是setenvif
而不是SetEnv
所以你应该可以做类似
的事情SetEnvIf Request_URI "^.*" base_path=/cig/base3
http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif