apache 2.4基于名称的virtualhost不工作

apache 2.4基于名称的virtualhost不工作,apache,mod-rewrite,virtualhost,apache2.4,Apache,Mod Rewrite,Virtualhost,Apache2.4,我正在使用AmazonEC2,我已经整合了这两个站点,需要为我的旧站点设置不同的重定向规则。但是,当我尝试使用下面的配置执行相同操作时,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-vho

我正在使用AmazonEC2,我已经整合了这两个站点,需要为我的旧站点设置不同的重定向规则。但是,当我尝试使用下面的配置执行相同操作时,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>

ServerName site1.com
ServerAlias site1.com
DocumentRoot“/网站/站点1”
要求所有授权
选项索引如下SYMLINKS包括ExecCGI
允许超越所有
重新启动发动机
重写规则^/page1$page2.html
ServerName site2.com
ServerAlias site2.com
DocumentRoot“/网站/站点2”
要求所有授权
选项索引如下SYMLINKS包括ExecCGI
允许超越所有
重新启动发动机
重写规则^/page3$page4.html
谢谢 湿婆

  • 一定会像covener提到的那样尝试清除浏览器缓存。。。如果你还没有
  • 确保您可以成功达到预期的重写目标
  • 如果这两个都没有发现问题,您可以将%v和%{host}i添加到活动日志格式中,以确认传入的主机头值以及Apache使用的服务器名。例如:

  • 日志格式“%h%l%u%t\%r\”%>s%bHOST=%{HOST}i ServerName=%v

    如果没有其他主机匹配,默认情况下将使用第一个vhost

    因此,您需要找出为什么不匹配第二台主机

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

    因此,不是:

    ServerName site1.com
    ServerAlias site1.com 
    
    你通常会这样做:

    ServerName site1.com
    ServerAlias www.site1.com 
    
    您还可以使用以下命令获取当前配置的vhost列表:

    apachectl -S
    

    除此之外,我所能建议的就是查找拼写错误,确保Apache正确重启(但这似乎没问题,因为在第一个实例中放置3->4重定向时,您可以让它工作),确保主机正确地通过PAS传输到Apache(例如,如果Apache在代理之后)根据Brandon的建议,该页面存在于site2上,并检查日志文件是否存在错误。

    当您转到时,会附加什么?您正在测试的逐字URL是什么?您是否排除了浏览器缓存的可能性?如果我使用site2.com/page3,它将变成404页。但是,如果我在第一个虚拟主机中放置相同的Page3URL,它就可以正常工作。基本上,我只能为site1.com(这是第一个虚拟主机)设置重定向规则。请参见下面我的评论。1) 我已从浏览器中清除缓存,但它没有帮助。2) 此外,个人目标工作良好。3)apachectl-S是清单2虚拟主机。4) 很抱歉,虽然我添加了日志格式,但在我的错误日志文件中没有看到任何更改。。另外,当我尝试将site2 virtualhost作为第一个条目添加时,/page3开始工作,/page1停止工作。因此,它总是在httpd-vhost-all.conf文件中获取第一个虚拟主机条目。1)Apache 2.4应该自动启用基于名称的虚拟主机,但手动启用它作为测试肯定不会有什么坏处。。。i、 e.在vHost之外添加以下行:NameVirtualHost*:80 2)不确定客户端和服务器之间是否有任何内容,但可能需要确保在主机名到达服务器之前没有任何内容正在转换/转换主机名。这就是我建议将%{host}I添加到日志格式的原因。这将在请求到达服务器时显示其主机名。为了澄清这一点,日志格式是针对访问日志的:1)我尝试添加名称virutalhost*: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---[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所以这听起来像是请求主机名的问题。这些请求显示HOST=site.com,这是请求上的主机头值。“site.com”与VHost的ServerName值都不匹配,因此Apache只使用它找到的第一个端口80 VHost。如果您在浏览器中请求“site2.com”,则在它到达服务器之前,会有东西将其更改为“site.com”。请求是否通过任何中间设备?e、 代理、负载均衡器、网关等。