Moj*_*ian 13 php apache .htaccess mod-rewrite
我为我的网站定义了一个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]
Run Code Online (Sandbox Code Playgroud)
我想将我的站点根路径保存在这样的变量中:
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]
Run Code Online (Sandbox Code Playgroud)
因为我可能需要BASE_PATH稍后在更多代码中使用值,也可能会更改,我不想每次都在我的htaccess文件中搜索和替换.但是当我使用上面的代码时,在htaccess文件%{ENV:BASE_PATH}中返回一个空值而不是预期/cig/base3但在php中我使用时调用它:
<?php $specialPath = getenv('BASE_PATH'); var_dump($specialPath)?>
Run Code Online (Sandbox Code Playgroud)
它显示正确的值/cig/base3.
什么是我的代码中的问题,我该如何解决这个问题?
Pan*_*ack 10
您不能使用SetEnv这种方式,因为它尚未处理.
此指令设置的内部环境变量在大多数早期请求处理指令运行后设置,例如访问控制和URI到文件名映射.如果您设置的环境变量是作为RewriteRule指令的早期处理阶段的输入,则应该使用SetEnvIf设置环境变量.
你在找什么setenvif而不是SetEnv
所以你应该可以做类似的事情
SetEnvIf Request_URI "^.*" base_path=/cig/base3
Run Code Online (Sandbox Code Playgroud)
http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif
| 归档时间: |
|
| 查看次数: |
14468 次 |
| 最近记录: |