简单地说,我有点不寻常的问题,不幸的是,我还没有找到一个合适的答案在浩瀚的互联网:
我想在Apache(2.4).htaccess
-文件中定义一个局部变量,并在同一个文件中使用它,即读取它。
我也看到了其他的贡献,比如this one。然而,我不想在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'
型
1条答案
按热度按时间dced5bon1#
不幸的是,对于这些特定的指令,单独使用
.htaccess
是不可能的(你需要访问服务器配置),原因有两个:AuthUserFile
个(mod_authn_file的一部分)和AuthGroupFile
(mod_authz_groupfile的一部分)不要(还没有?)支持expression syntax,允许引用环境变量(从操作系统导入或使用SetEnvIf
设置),语法格式为%{reqenv:VARIABLE}
。(在Apache 2.4的后续版本中,许多模块/指令已经更新以允许这种语法,但不幸的是,没有出现问题的指令。<VirtualHost>
容器),以便在其他配置指令中使用Define
服务器变量。如果您可以访问服务器配置,那么您可以使用语法${VARIABLE}
在任何配置指令中使用Define
变量-这些变量被解析 * 早期 *,所以不依赖于有问题的指令。举例来说:
个字符
然而,这两个选项都不是真正的“本地”变量。环境变量对于 environment 来说是“本地”的,而
Define
'd服务器变量可以说是“全局”的(它们设置在“本地化”容器中,例如<VirtualHost>
或<Directory>
,但可以在该容器之外访问)。型
关于使用
SetEnv
(mod_env)来设置环境变量。这个指令(模块)处理得很晚。太晚了,大多数其他配置指令都无法使用。如果你需要设置一个环境变量供其他指令使用,那么你几乎总是需要使用SetEnvIf
(mod_setenvif)来代替,它处理得很早。(You也可以使用mod_rewrite,
RewriteRule
设置env变量,它也会 * 早 * 处理,但晚于SetEnvIf
。除非你主要使用mod_rewrite,或者有一个复杂的条件,否则你不会使用mod_rewrite over mod_setenvif来设置env变量。)