![在Linux conf文件中替换字符串(变量)?](https://linux22.com/image/504175/%E5%9C%A8Linux%20conf%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%88%E5%8F%98%E9%87%8F%EF%BC%89%EF%BC%9F.png)
我有一个 apache2 虚拟主机的配置文件。对于每个虚拟主机,我都有一个如下所示的配置文件:
NameVirtualHost mydomain.co.uk:80
<VirtualHost mydomain.co.uk:80>
DocumentRoot /home/d/r/drupal/web/public_html
ServerName mydomain.co.uk
ServerAlias www.mydomain.co.uk
ErrorLog /var/log/apache2/sites/mydomain.co.uk_error-log
CustomLog /var/log/apache2/sites/mydomain.co.uk_access-log "combined"
# Rewrite the www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.mydomain.co.uk/?$ [NC]
RewriteRule ^(.*)$ http://mydomain.co.uk$1 [L,R=301]
# Read in the drupal configuration
Include conf.d/drupal6.conf
# Block access while developing
# Include conf.d/beta.conf
</VirtualHost>
我怎样才能在一个地方指定 myDomain 并重新使用这个字符串。即
mydomain = "www.SomeDomainIHave.com"
我的想法是,在文件顶部指定域名,以避免进一步出现任何错误。
希望这是有意义的。
谢谢。
答案1
或者,如果您的大多数虚拟主机都遵循类似的模板,则可以使用 mod_macro。我最近为具有 200 多个类似虚拟主机的 apache 安装设置了它,它运行良好。
你的例子将被重写如下:( /etc/apache2/macro.d/drupal.vhost.conf (
<Macro drupal0 $domain>
NameVirtualHost $domain:80
<VirtualHost $domain:80>
DocumentRoot /home/d/r/drupal/web/public_html
ServerName $domain
ServerAlias www.$domain
ErrorLog /var/log/apache2/sites/$domain_error-log
CustomLog /var/log/apache2/sites/$domain_access-log "combined"
# Rewrite the www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.$domain/?$ [NC]
RewriteRule ^(.*)$ http://$domain$1 [L,R=301]
# Read in the drupal configuration
Include conf.d/drupal6.conf
# Block access while developing
# Include conf.d/beta.conf
</VirtualHost>
</Macro>
使用宏:(/etc/apache2/sites-available/drupal.sites.conf)
Include /etc/apache2/macro.d/drupal.vhost.conf
Use drupal0 mydomain.co.uk
答案2
直接这样做不行。但是,如果您有很多这样的参数需要设置,那么基于模板的方法就可以了。使用 m4/sed/ruby/python 替换文件中的变量。缺点是,当您更改某些内容时,您必须有一个重新生成文件的过程,但这可以自动化。
答案3
答案4
正如 Keltia 所说,不可能使用变量,但也许mod_vhost_alias可以帮助您解决问题。
<VirtualHost 111.22.33.44>
ServerName www.commercial.isp.com
CustomLog logs/access_log.commercial vcommon
VirtualDocumentRoot /www/commercial/%0/docs
VirtualScriptAlias /www/commercial/%0/cgi-bin
</VirtualHost>
%0
在此示例中将替换为www.commercial.isp.com
。
这里还有一些例子。