我的 Debian 机器上有以下配置文件:
<VirtualHost *:80>
ServerAdmin [email protected]
VirtualDocumentRoot /var/workspace/www/%2_%3/%1
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/workspace/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这对于自动化来说非常棒 - 我只需在特定路径和域中创建一个目录就可以开始工作。
但有时我需要启动应用程序,其文档根位于其他地方(通常是 www 目录或其他目录),我该如何指定此 VirtualHosts 并继续使用旧的自动 VirtualHosts?
当我添加例如这个:
<VirtualHost *:80>
ServerName www.phabricator.com.local
DocumentRoot /var/workspace/www/phabricator_com/www/webroot
RewriteEngine on
RewriteRule ^/rsrc/(.*) - [L,QSA]
RewriteRule ^/favicon.ico - [L,QSA]
RewriteRule ^(.*)$ /index.php?__path__=$1 [L,QSA]
SetEnv PHABRICATOR_ENV custom/socialbakers
</VirtualHost>
它路由所有请求/var/workspace/www/phabricator_com/www/webroot
并忽略其他虚拟主机(如上所述)。
为什么?
答案1
确保已启用允许命名虚拟主机的指令。我的意思是:
名称虚拟主机 *:80
...在您的 /etc/httpd/conf/httpd.conf 文件中。
答案2
您确定在 之后提供了正确的名称ServerName
吗?我的意思是,它以 结尾.local
;它是 HTTP 请求Host
标头所包含的内容吗?如果Host
HTTP 请求中的标头与任何基于名称的虚拟主机都不匹配(或者请求没有Host
标头),则将使用第一个虚拟主机。