У меня есть следующая настройка для автоматического создания поддоменов / корней виртуальных документов, настроенных в /etc/apache2/apache2.conf (работает на Debian 7.0)
<VirtualHost *:80>
ServerAlias *
UseCanonicalName Off
VirtualDocumentRoot /home/%2/htdocs/%1
# Setup correct (virtual) document root as $_SERVER['DOCUMENT_ROOT'] for PHP
php_admin_value auto_prepend_file /home/jbraun/setdocroot.php
<Directory /home/%2/htdocs/%1>
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
# These lines don't work
AuthType Basic
AuthName "HALMA"
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
# Commented for testing purposes only
# Allow from halma.lan
# Satisfy any
</Directory>
CustomLog ${APACHE_LOG_DIR}/vhost_access.log combined
Приведенная выше конфигурация позволяет пользователям создавать подкаталоги в своих /home/username/htdocs/
каталог и доступ к ним в браузере с помощью динамически генерируемого поддомена, например Папка /home/jbraun/htdocs/project
будет доступен по адресу http://project.jbraun.halma.lan
(где halma.lan
- имя локальной интрасети, соответствующий DNS настроен и работает). Кроме того, вся история доступна через службу DynDNS по аналогичным URL-адресам, например project.jbraun.foobar.dyndns.org
из внешнего мира.
Я хотел бы иметь доступ из локальной сети (halma.lan
или скажем 192.168.2.*
) без защиты паролем при доступе из WAN через URL-адрес DynDNS (project.jbraun.foobar.dyndns.org
) должен быть защищен паролем.
Таким образом, я следил за документами Apache и добавил строки «Auth *»
AuthType Basic
AuthName "HALMA"
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
но, к сожалению, ничего не происходит (да, я тем временем перезапустил apache). Журнал ошибок сервера тоже не используется.
Когда я добавляю те же строки в файлы .htaccess некоторых из моих проектов, все работает так, как ожидалось, поэтому я предполагаю, что должны быть некоторые проблемы с VirtualDocumentRoot и / или динамически сгенерированными путями к файлам в конфигурации.
Может ли кто-нибудь указать мне правильное направление, как я могу это сделать или возможно ли это вообще?
Заранее большое спасибо.
* [РЕДАКТИРОВАТЬ] *
Я хотел бы опубликовать конфигурацию, которая в итоге сработала, просто для справки и других людей, которые ищут эту проблему:
<VirtualHost *:80>
ServerAlias *.*.halma.lan
ServerAlias *.*.foobar.dyndns.org
UseCanonicalName Off
VirtualDocumentRoot /home/%2/htdocs/%1
# Setup correct (virtual) document root as $_SERVER['DOCUMENT_ROOT'] for PHP
php_admin_value auto_prepend_file /home/jbraun/setdocroot.php
#<Directory /home/%2/htdocs/%1>
<Directory ~ "^/home/.*/htdocs/.*/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
DirectoryIndex index.html index.php
AuthType Basic
AuthName "HALMA"
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
Allow from 10.0.0
Satisfy Any
</Directory>
CustomLog ${APACHE_LOG_DIR}/vhost_access.log combined
</VirtualHost>
Спасибо HBruijn
Я думаю, можно с уверенностью сказать %1
и %2
расширения происходят только в нескольких mod_vhost_alias директивы, поддерживающие такую магию.
Это может быть пример, когда немного менее безопасный Location
директива может использоваться для хранения директив аутентификации, т.е.
<Location />
AuthType Basic
AuthName "HALMA"
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
</Location>
В качестве альтернативы Каталог Директива также может содержать регулярные выражения, допускающие что-то вроде:
<Directory ~ "^/home/.*/htdocs/.*/">
</Directory>
Что вы можете улучшить, добавив регулярное выражение, которое соответствует вашим соглашениям об именах пользователей, например. "^/home/([a-z_][a-z0-9_]{0,30})/htdocs/.*/"