2016-01-18 84 views
0

我正在使用Amazon Ec2,并且我已经整合了2个站点,并且需要为我的旧站点设置不同的重定向规则。但是当我尝试与下面的配置相同时,Web服务器始终使用第一个虚拟主机条目(site1.com),而不使用第二个虚拟主机条目(site2.com)。 你能检查我是否缺少任何东西。apache 2.4基于名称的虚拟主机不能正常工作

请参阅下面我的配置。

的httpd.conf:

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

的httpd的虚拟主机,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> 

感谢 湿婆

+0

当你访问http://site2.com/page3时附加了什么? – ben75

+0

什么是您正在测试的逐字URL?你有没有淘汰浏览器缓存? – covener

+0

如果我使用site2.com/page3,它将进入404页面。但是,如果我在第一个虚拟主机中放置相同的page3 url,那么它工作的很好。基本上我可以有我的重定向规则只适用于site1.com(这是第一个虚拟主机) – Siva

回答

0
  1. 肯定会尝试清除浏览器缓存中提到covener。 ..如果你还没有。
  2. 确保您可以成功地达到预期的重写目标?

http://site2.com/page4.html

  • 如果没有那些揭示问题,我可以添加%v和%(东道国)到活动的LogFormat确认收到的主机头值以及Apache正在使用哪个ServerName。例如:
  • 的LogFormat “%H%升%U%T \” %r \ “%>取值%B HOST =%{主机}我SERVERNAME =%V

    +0

    请参阅下面我的意见。 1)我已经清除了浏览器的缓存,并没有帮助。 2)个人目标也很好。 3)apachectl -S列出2个虚拟主机。 4)对不起,虽然我添加了LogFormat,但在我的error_log文件中没有看到任何更改。另外,当我尝试将site2虚拟主机添加为第一项时,/ page3开始工作并且/ page1停止工作。所以不知何故,它总是在httpd-vhost-all.conf文件中获取第一个虚拟主机条目。 – Siva

    +0

    1)Apache 2.4应该自动启用基于名称的VHOSTING,但肯定不会伤害手动启用它作为测试...即在Vhosts之外添加以下行: NameVirtualHost *:80 2)不确定在客户端和服务器之间是否有任何东西,但可能要确保主机名在到达服务器之前不会转换/翻译主机名。这就是为什么我建议将%{host}我添加到LogFormat。这将显示请求到达服务器时的主机名。并且为了澄清,LogFormat是针对access_log的。 –

    +0

    :1)我已经尝试添加NameVirutalhost *:80并仍然有相同的问题。 2)也请看下面的输出日志。下面一个用于Site2.com仍然作为site1.com XX.XX- - [19/Jan/2016:13:37:31 -0500]“GET/page3 HTTP/1.1”404 65854 HOST = site。 com ServerName = site1.com XX.XX- - [19/Jan/2016:13:37:32 -0500]“GET/HTTP/1.1”200 65 HOST = site.com ServerName = site1.com XX.XX - - [19/Jan/2016:13:37:32 -0500]“GET/HTTP/1.1”304 - HOST = site.com ServerName = site1.com XX.XX.X.XX - - [19/Jan/2016:13:37:33 -0500]“GET/HTTP/1.1”200 65 HOST = site.com ServerName = site1.com – Siva

    0

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

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

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

    所以不是:

    ServerName site1.com 
    ServerAlias site1.com 
    

    你通常会做:

    ServerName site1.com 
    ServerAlias www.site1.com 
    

    您也可以使用以下命令获取当前配置的虚拟主机列表:

    apachectl -S 
    

    其他比所有我能建议的是寻找错别字,确保Apache重启正常(但似乎因为你可以在第一次把3→4重定向的时候使它工作),确保主机正在被适配到Apache。如果Apache位于代理之后),并且根据Brandon的建议并检查日志文件是否存在错误,该网页将存在于site2上。