У меня есть файл конфигурации для виртуальных хостов 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
В качестве альтернативы, если большинство ваших vhosts следуют схожим шаблонам, вы можете использовать mod_macro. Я недавно настроил это для установки Apache с 200+ схожими vhosts, и это работает как по волшебству.
Ваш пример будет переписан следующим образом: ( /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
невозможно использовать переменные, как уже сказал Кельтиа, но, возможно,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
.
здесьвот еще несколько примеров.