首页 > 解决方案 > 如何使用目录名称作为 apache.conf 的变量?

问题描述

我没有太多的编码经验,我还在学习。

这是包含在 httpd.conf 中的单独配置文件

我有一个大型 apache 配置,想使用变量来清理配置文件。我的配置文件有超过 80 个类似的条目,如果我能弄清楚如何使用这些变量,我相信可以清理它们。我想取目录中文件的名称并将其用作变量。这里的目录是/www/pub/sites/8.0/conf/,conf文件里面是站点的php文件。我想创建或使用任何末尾有 .php 的文件的名称,并将该名称用作变量。因此,如果有一个名为 clark 的文件,apache 将使用变量 ${siteName},该变量将是一个名为 clark.php 的文件。希望我正确地解释自己,或者您至少可以理解我想要做什么。

    Redirect /direct /direct.php
<Directory /pub/www/sites/8.0/htdocs>
    Require all granted
    # Enable ".htaccess" to password protect directories.
    AllowOverride AuthConfig
</Directory>

Alias /forms /pub/www/sites/forms

<Directory /pub/www/sites/forms>
    Require all granted
</Directory>

<VirtualHost *:80>
    SetEnv siteName gentry
    DocumentRoot "/pub/www/sites/8.0/htdocs"
    ServerName gentry.testwebs.com
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

<VirtualHost *:80>
    SetEnv siteName foster
    DocumentRoot "/pub/www/sites/8.0/htdocs"
    ServerName foster.testwebs.com
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

<VirtualHost *:80>
    SetEnv siteName mcintosh
    DocumentRoot "/pub/www/sites/8.0/htdocs"
    ServerName mcintosh.testwebs.com
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

<VirtualHost *:80>
    SetEnv siteName clark
    DocumentRoot "/pub/www/sites/8.0/htdocs"
    ServerName clark.testwebs.com
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

#code basically repeats itself. etc ........
code here

当我启动 apache 时,下面的配置给了我一个错误。

[2021 年 7 月 7 日星期三 08:09:41.846350] [core:warn] [pid 21457:tid 140546613625472] AH00111:未定义配置变量 ${siteName}

我可以用这样的东西清理它吗?

SetEnv sitesName "/www/pub/sites/8.0/conf/${sitesName}.php"

<Directory /pub/www/sites/8.0/htdocs>
    Require all granted
    # Enable ".htaccess" to password protect directories.
    AllowOverride AuthConfig
</Directory>

Alias /forms /pub/www/sites/forms
<Directory /pub/www/sites/forms>
    Require all granted
</Directory>

<VirtualHost *:80>
    SetEnv sitesName "/www/pub/sites/8.0/conf/${sitesName}.php"
    DocumentRoot "/pub/www/sites/8.0/htdocs"
    ServerName ${sitesName}.testwebs.com
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

[/code]

提前感谢您的帮助。

标签: phpapachewebserverhttpd.conf

解决方案


您搜索的是一个名为mod_vhost_alias 您可以使用的 apache2 模块

sudo a2enmod vhost_alias
sudo systemctl restart apache2

然后你应该用类似的东西编辑你的配置

<VirtualHost *:80>
    UseCanonicalName Off
    VirtualDocumentRoot "/var/www/%-2"
</VirtualHost>

更多信息,例如该文章的变量详细信息和来源


推荐阅读