用一个linux conf文件replace一个string(variables)?

我有一个用于apache2虚拟主机的configuration文件。 对于每个virtuahost我有一个像这样的conf文件:

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并重新使用此string。 即

 mydomain = "www.SomeDomainIHave.com" 

这个想法是我在文件的顶部指定了一个域名,以避免进一步的错误。

希望这是有道理的。

谢谢。

或者,如果大多数虚拟主机都遵循类似的模板,则可以使用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> 

使用macros:(/etc/apache2/sites-available/drupal.sites.conf)

 Include /etc/apache2/macro.d/drupal.vhost.conf Use drupal0 mydomain.co.uk 

直接你不能。 但是,如果你想要设置这样的参数,那么可以使用基于模板的方法。 使用m4 / sed / ruby​​ / pythonreplace文件中的variables。 缺点是你必须有一个过程来重新生成文件,当你改变的东西,但可以自动化。

看看像Puppet或Chef这样的configurationpipe理工具。 这些将允许您定义configuration文件模板,并在对设置进行任何更改时重build它们。 然后,您可以定义通用设置,如域名,并在您的模板中重复使用。 这些工具然后将部署新的configuration并重新启动您的Web服务。 只是不要重新发明轮子写你自己的configurationpipe理工具(谁还没有这样做,btw?:))

你不能直接在apache中这样做。 你将不得不使用一些其他的过程来生成Apacheconfiguration文件。

不能像Keltia已经说过的那样使用variables,但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

这里是一些更多的例子。