我有两个网站在 Apache 服务器后面运行。
其中之一向 api.xyzzy.com 提供请求
另一个服务于传入的任何其他流量(数十个域、子域等),因此是一个包罗万象的通配符。
使用下面的配置,对http://api.xyzzy.com/下的深层链接的请求...转到正确的虚拟主机(第一个),但对http://api.xyzzy.com的顶级请求/加载第二个通用通配符虚拟主机。
我在这里做错了什么?
LoadModule passenger_module /home/webby/.rvm/gems/ruby-1.9.3-p286/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
PassengerRoot /home/webby/.rvm/gems/ruby-1.9.3-p286/gems/passenger-3.0.18
PassengerRuby /home/webby/.rvm/wrappers/ruby-1.9.3-p286/ruby
NameVirtualHost *:80
<VirtualHost *:80>
ServerName api.xyzzy.com
ServerAlias api.xyzzy.com
RailsEnv production
DocumentRoot /home/webby/rails/current/public
</VirtualHost>
<VirtualHost *:80>
ServerAlias *
<Directory /usr/local/xyzzy/webapps/wwwroot >
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DocumentRoot /usr/local/xyzzy/webapps/wwwroot
</VirtualHost>
更新:
下面的配置现在似乎按预期工作。这是基于@Winfield 的回答。
看来我的测试可能出错了。我的浏览器 (Chrome) 可能会自动完成我输入的带有 https(不是 http)前缀的地址。不幸的是,直到尝试了数十种配置排列后,我才注意到这种异常,因此很难说出最终的正确分辨率是多少。我应该在命令行上使用 curl 进行更可靠的测试,而不是在浏览器栏中输入。
<VirtualHost *:80>
<Directory /usr/local/xyzzy/webapps/wwwroot >
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DocumentRoot /usr/local/xyzzy/webapps/wwwroot
</VirtualHost>
<VirtualHost *:80>
ServerAlias api.xyzzy.com
RailsEnv production
DocumentRoot /home/webby/rails/current/public
</VirtualHost>