apache 2.4基于名称的虚拟主机无法正常工作

时间:2016-01-18 22:17:21

标签: apache mod-rewrite virtualhost apache2.4

我正在使用Amazon Ec2,我整合了2个网站,需要为我的旧网站设置不同的重定向规则。但是当我尝试使用以下配置时,Web服务器始终采用第一个虚拟主机条目(site1.com)而不是第二个虚拟主机条目(site2.com)。 你能检查我是否遗漏了什么。

请参阅下面的配置。

httpd.conf:

Listen 0.0.0.0:80
Listen 0.0.0.0:443
Include conf/extra/httpd-vhosts-all.conf

httpd-vhosts-all.conf:

<VirtualHost *:80>
ServerName site1.com
ServerAlias site1.com 
DocumentRoot "/websites/site1"  
<Directory /websites/site1 > 
Require all granted
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
   </Directory>    
RewriteEngine On
RewriteRule     ^/page1$    page2.html
</VirtualHost>
<VirtualHost *:80>
 ServerName site2.com 
 ServerAlias site2.com    
 DocumentRoot "/websites/site2" 
 <Directory /websites/site2 > 
   Require all granted
      Options Indexes FollowSymLinks Includes ExecCGI
     AllowOverride All
 </Directory> 
 RewriteEngine On
 RewriteRule     ^/page3$   page4.html
 </VirtualHost>

由于 希瓦

2 个答案:

答案 0 :(得分:0)

  1. 肯定会尝试清除您提到的浏览器缓存......如果您还没有。
  2. 确保您可以成功达到预期的重写目标吗?
  3. http://site2.com/page4.html

    1. 如果这些都没有显示问题,您可以将%v和%{host} i添加到活动的LogFormat,以确认传入的主机头值以及Apache正在使用的ServerName。例如:
    2. LogFormat&#34;%h%l%u%t \&#34;%r \&#34; %&gt; s%b HOST =%{host} i ServerName =%v &#34;

答案 1 :(得分:0)

如果没有匹配其他主机,则默认使用第一个vhost。

所以你需要弄清楚为什么你不匹配第二个主机。

您是否正在使用www.site2.com?这将无法匹配第二个vhost(仅在没有www的情况下为site2.com设置)。我也不明白你为什么在ServerName和ServerAlias中设置相同的值?通常在第一个中设置首选ServerName,在第二个中设置任何别名(包括www版本)。

所以而不是:

ServerName site1.com
ServerAlias site1.com 

您通常会这样做:

ServerName site1.com
ServerAlias www.site1.com 

您还可以使用以下命令获取当前配置的vhost列表:

apachectl -S

除此之外,我所能建议的是寻找拼写错误,确保Apache正确重启(但这似乎没问题,因为你可以在第一次使用3&gt; 4重定向时让它工作),确保主机正确地适用于Apache(例如,如果Apache位于代理之后),并且根据Brandon的建议并检查日志文件中的页面存在错误。