提问人:DevArchitectMaster 提问时间:11/5/2023 最后编辑:DevArchitectMaster 更新时间:11/14/2023 访问量:41
在apache .htaccess文件中创建和使用自己的变量
Create and use your own variables in apache .htaccess file
问:
简单地谈谈我有点不寻常的问题,不幸的是,在浩瀚的互联网中,我还没有找到合适的答案:
我想在 Apache (2.4) .htaccess-file
中定义一个局部变量,并在同一文件中使用它,即读取它。
我还看到了其他贡献,例如这个。但是,我不想使用 中的变量,但如下例所示。RewriteCond
初始情况:我有一条静态路径,我经常不得不将其放在各种相对路径的前面。此问题阻止我手动添加路径 (DRY)。我想避免这种冗余,并回到变量的概念上。
.htaccess
# however variables are defined
VAR_TO_PATH = "/abs/path/to/"
# use of the variable
AuthUserFile VAR_TO_PATH."/htdata/.htpasswd"
AuthGroupFile VAR_TO_PATH."/htdata/.htgroup"
谁能帮我满足我的要求?
干杯
已测试不满意
.htaccess
# definition of variables
SetEnv root_path "C:/xampp/htdocs/my/"
# use of the variable
AuthUserFile "%{SERVER:root_path}htdata/.htpasswd"
AuthGroupFile "%{ENV:root_path}htdata/.htgroup"
error.log
[Sun Nov 12 21:53:56.703673 2023] [core:alert] [pid 20688:tid 1900] [client 127.0.0.1:51989] C:/xampp/htdocs/my/.htaccess: AuthUserFile: Invalid file path '%{ENV:root_path}.htdata/.htpasswd'
[Sun Nov 12 21:54:11.942883 2023] [core:alert] [pid 20688:tid 1900] [client 127.0.0.1:52011] C:/xampp/htdocs/my/.htaccess: AuthGroupFile: Invalid file path '%{SERVER:root_path}.htdata/.htgroup'
答:
不幸的是,对于这些特定指令(您需要访问服务器配置),这还不能单独使用(目前还可能),原因如下:.htaccess
AuthUserFile
(mod_authn_file的一部分)和(mod_authz_groupfile的一部分)不支持表达式语法,该语法允许使用以下形式的语法引用环境变量(从操作系统导入或设置)。(在 Apache 2.4 的更高版本中,许多模块/指令已更新为允许此语法,但不幸的是,相关指令没有。AuthGroupFile
SetEnvIf
%{reqenv:VARIABLE}
您需要访问主服务器配置(例如。 container),以便服务器变量可用于其他配置指令。如果您有权访问服务器配置,则可以使用语法
定义
可在任何配置指令中使用的变量 - 这些变量是早期解析的,因此不依赖于相关指令。<VirtualHost>
Define
${VARIABLE}
例如:
# Main server config <VirtualHost: *443> Define VAR_TO_PATH /abs/path/to/ :
# .htaccess AuthUserFile ${VAR_TO_PATH}/htdata/.htpasswd AuthGroupFile ${VAR_TO_PATH}/htdata/.htgroup
但是,这两个选项都不是真正被视为“局部”变量。环境变量是环境的“本地”,而 'd 服务器变量可以说是“全局的”(它们设置在“本地化”容器中,例如 or,但随后可以在该容器外部访问)。Define
<VirtualHost>
<Directory>
旁白:
# definition of variables SetEnv root_path "C:/xampp/htdocs/my/"
关于使用 (mod_env) 设置环境变量。此指令(模块)处理得很晚。为时已晚,无法被大多数其他配置指令所接受。如果需要设置其他指令使用的环境变量,则几乎总是需要改用 SetEnvIf
(mod_setenvif),这是早期处理的。SetEnv
(您还可以使用 mod_rewrite 设置 env 变量,该变量的处理时间也较早,但晚于 。除非您主要使用 mod_rewrite,或者具有复杂的条件,否则不会使用 mod_rewrite over mod_setenvif来设置 env vars。RewriteRule
SetEnvIf
评论
RewriteCond
%{ENV:ROOT_PATH}