【问题标题】:Apache Virtualhost Redirect Not WorkingApache 虚拟主机重定向不起作用
【发布时间】:2015-02-22 18:20:49
【问题描述】:

我在我的虚拟主机中为子域设置了两个简单的重定向;一个有效,一个无效:

<VirtualHost *:80>
 ServerName subdomain.site.com
 Redirect / https://subdomain.site.com/subdirectory/login.php
</VirtualHost>

<VirtualHost x.x.x.x:443>
 ServerName subdomain.site.com
 Redirect / https://subdomain.site.com/subdirectory/login.php
 SSLEngine on
 SSLCertificateFile /etc/httpd/ssl/subdomain.site.com.crt
 SSLCertificateKeyFile /etc/httpd/ssl/subdomain.site.com.key
 ErrorLog logs/ssl_error_log
 CustomLog logs/ssl_access_log common
</VirtualHost>

第一个重定向有效。也就是说,如果有人在浏览器中简单地键入 subdomain.site.com,它会重定向到 https 和正确的子目录。第二个重定向不起作用。如果有人输入https://subdomain.site.com,它会显示“Firefox 检测到服务器正在以一种永远不会完成的方式重定向对该地址的请求”并且浏览器 URL 变为“subdomain.site.com/subdirectory/login.phpsubdirectory/login” .phpsubdirectory/login.phpsubdirectory/login.php..." 而不是重定向到正确的https://subdomain.site.com/subdirectory/login.php 页面。谁能指出我正确的方向?

编辑:我将上面的 VirtualHosts 文件更新到了较新的版本,问题已经改变,所以我也更新了问题描述。

【问题讨论】:

  • 如果使用https 方案,你真的需要重定向吗?当端口为443 时,进行 SSL 握手并为网页提供服务。只是好奇。
  • &lt;VirtualHost&gt; 块是否已满?应该还有几行: SSLEngine on SSLCertificateFile /path/to/your_domain_name.crt SSLCertificateKeyFile /path/to/your_private.key SSLCertificateChainFile /path/to/DigiCertCA.crt
  • 因此 SSLEngine 代码块的其余部分位于 conf.d 目录中的单独 ssl.conf 文件中。我将这些条目移动到同一个 site.conf 文件中,最终破坏了一切。再试一次。

标签: apache redirect virtualhost


【解决方案1】:

如果您使用 SSL,您应该更改 default-ssl.conf 设置,例如

<VirtualHost *:443>
    ServerName subdomain.site.com
    ServerAlias subdomain.site.com  
    DocumentRoot /var/www/html/subdomain.site.com

【讨论】:

    【解决方案2】:

    您必须将此行添加到文件顶部

    NameVirtualHost x.x.x.x:443 或域名:443

    检查你的 apache 版本。

    【讨论】:

      【解决方案3】:

      如果你在 /etc/hosts 中使用 ubuntu(我的意思是基于 debian 的 linux 发行版),你应该定义如下一行: 127.0.0.1 你的域名

      然后在以下位置为您的新站点配置创建一个新文件: /etc/apache2/sites-available/

      并将其命名为您的域名 .conf 只是为了不要忘记该 conf 文件的用途。 然后使用以下命令启用新的 conf a2ensite your_conf_name 然后重新启动apache。 现在您的新站点配置已准备就绪。 现在看看下面的链接: http://httpd.apache.org/docs/2.2/bind.html 你必须提到你的 apache 应该监听多个端口 在你的情况下 80 , 443

      【讨论】:

      • 我在 CentOS 6.5 上,但我仍然尝试修改 hosts 文件并重新启动,但没有成功。不过还是谢谢。
      • 仅供参考,它的 127.0.0.1(你忘记了 1)
      【解决方案4】:

      好的,上面的答案都不起作用,所以我不得不继续努力。最终,我从 :443 virtualhost 部分删除了重定向行,并将以下两行添加到同一部分以使其正常工作:

      RewriteEngine On
      RewriteRule ^/$ https://subdomain.site.com/subdirectory/login.php [R=301,NC,L]
      

      【讨论】:

      • 我昨天遇到了同样的问题,对我来说添加这一行是有效的:127.0.0.1 localhost
      【解决方案5】:

      您必须将此行添加到文件顶部:

      NameVirtualHost x.x.x.x
      

      Listen 80
      Listen 443
      

      问候

      【讨论】:

      • 感谢您的建议,但这不起作用,实际上破坏了现有设置。开始 httpd: [Wed Dec 24 09:33:15 2014] [warn] NameVirtualHost 192.168.1.1:0 has no VirtualHosts (98)Address already in use: make_sock: could not bind to address [::]:80 (98)地址已在使用:make_sock:无法绑定到地址 [::]:443
      • 将 192.168.1.1 更改为您的 IP 地址或尝试以下行:Listen 80Listen 443
      • 为了保持一致,我只是在这里输入了 192.168.1.1;在我的网络服务器上,我使用了实际的网络服务器 eth0 内部 IP。我还尝试仅使用监听行删除 NameVirtualHost 行,但它也不起作用。现在我怀疑在这里设置自签名 SSL 证书的人没有正确执行。
      猜你喜欢
      • 2018-12-21
      • 2018-05-09
      • 2014-07-10
      • 2014-01-19
      • 2022-01-12
      • 2015-10-23
      • 1970-01-01
      • 2012-12-13
      • 2022-06-18
      相关资源
      最近更新 更多