在apache.htaccess文件中创建和使用自己的变量

wsewodh2  于 12个月前  发布在  Apache
关注(0)|答案(1)|浏览(194)

简单地说,我有点不寻常的问题,不幸的是,我还没有找到一个合适的答案在浩瀚的互联网:

我想在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'

dced5bon

dced5bon1#

不幸的是,对于这些特定的指令,单独使用.htaccess是不可能的(你需要访问服务器配置),原因有两个:

  • AuthUserFile个(mod_authn_file的一部分)和AuthGroupFile(mod_authz_groupfile的一部分)不要(还没有?)支持expression syntax,允许引用环境变量(从操作系统导入或使用SetEnvIf设置),语法格式为%{reqenv:VARIABLE}。(在Apache 2.4的后续版本中,许多模块/指令已经更新以允许这种语法,但不幸的是,没有出现问题的指令。
  • 您需要访问主服务器配置(例如<VirtualHost>容器),以便在其他配置指令中使用Define服务器变量。如果您可以访问服务器配置,那么您可以使用语法${VARIABLE}在任何配置指令中使用Define变量-这些变量被解析 * 早期 *,所以不依赖于有问题的指令。

举例来说:

# Main server config
<VirtualHost: *443>
    Define VAR_TO_PATH /abs/path/to/
    :

个字符
然而,这两个选项都不是真正的“本地”变量。环境变量对于 environment 来说是“本地”的,而Define'd服务器变量可以说是“全局”的(它们设置在“本地化”容器中,例如<VirtualHost><Directory>,但可以在该容器之外访问)。

  • 旁白:*
# definition of variables
SetEnv root_path "C:/xampp/htdocs/my/"


关于使用SetEnv(mod_env)来设置环境变量。这个指令(模块)处理得很晚。太晚了,大多数其他配置指令都无法使用。如果你需要设置一个环境变量供其他指令使用,那么你几乎总是需要使用SetEnvIf(mod_setenvif)来代替,它处理得很早。
(You也可以使用mod_rewrite,RewriteRule设置env变量,它也会 * 早 * 处理,但晚于SetEnvIf。除非你主要使用mod_rewrite,或者有一个复杂的条件,否则你不会使用mod_rewrite over mod_setenvif来设置env变量。)

相关问题