php - 如何使用目录名称作为 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]
提前感谢您的帮助。
解决方案
您搜索的是一个名为mod_vhost_alias
您可以使用的 apache2 模块
sudo a2enmod vhost_alias
sudo systemctl restart apache2
然后你应该用类似的东西编辑你的配置
<VirtualHost *:80>
UseCanonicalName Off
VirtualDocumentRoot "/var/www/%-2"
</VirtualHost>
更多信息,例如该文章的变量详细信息和来源
推荐阅读
- reactjs - 如何阻止 Office Fabric Dropdown 选择焦点上的第一个元素?
- kubernetes - kubernetes StorageClass 不保留现有数据
- xaml - 无法更改字体
- javascript - 如何使用 jasmine-ajax 来验证 send 方法是否被调用?
- regex - AWK - 基于正则表达式的增值
- java - 将 JSON Array 中的键获取到没有 Jackson 的列表中
- javascript - 如何使用工作表 api v4 将当前日期时间插入谷歌工作表,尊重工作表的时区?
- r - 在 R 中使用“extRemes”拟合广义极值 (GEV) 时出错?
- python - 改进一个简单的 1 层神经网络
- swift - Swift,翠鸟缓存无法正常工作?