【问题标题】:How do I use a directory name as variable for apache.conf?如何使用目录名称作为 apache.conf 的变量?
【发布时间】:2021-09-18 05:11:43
【问题描述】:

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

这是一个单独的配置文件,包含在 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]

提前感谢您的帮助。

【问题讨论】:

    标签: php apache webserver httpd.conf


    【解决方案1】:

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

    sudo a2enmod vhost_alias
    sudo systemctl restart apache2
    

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

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

    更多信息,例如article的变量详细信息和来源

    【讨论】:

    • 我如何只过滤它以使用扩展名为 .php 的文件。这不包括该目录中的所有文件吗?我将如何保留该域。并将所有内容都以 .php 作为子域。到 testwebs.com?
    • 您可以在该示例中添加其余配置,您可以在任何指令中使用变量。
    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2019-11-29
    • 1970-01-01
    相关资源
    最近更新 更多