【问题标题】:http://sub.site.com is incorrectly redirecting to http://www.sub.site.com instead of https://sub.site.comhttp://sub.site.com 错误地重定向到 http://www.sub.site.com 而不是 https://sub.site.com
【发布时间】:2017-08-25 22:27:58
【问题描述】:

在 Ubuntu 16.04.2 上使用 Apache 2.4.18

我将 blog.ryangiglio.com 设置为虚拟主机。我使用letsencrypt certbot 为服务器生成SSL 证书,并将其设置为强制从http://blog.ryangiglio.com 重定向到https://blog.ryangiglio.com。当您直接访问https://blog.ryangiglio.com 时,一切正常。但是,如果您改为转到http://blog.ryangiglio.com,您将被重定向到不存在也不应该存在的http://www.blog.ryangiglio.com

此域的 webroot 中没有可能导致冲突的 .htaccess 文件。

这是 blog.ryangiglio.com.conf 配置文件

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName blog.ryangiglio.com

    DocumentRoot /var/www/blog.ryangiglio.com/public_html
    ErrorLog /var/www/blog.ryangiglio.com/error.log
    # CustomLog /var/www/blog.ryangiglio.com/access.log combined

  <Directory /var/www/blog.ryangiglio.com/public_html/>
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =blog.ryangiglio.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

还有certbot生成的blog.ryangiglio.com-le-ssl.conf文件

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName blog.ryangiglio.com

    DocumentRoot /var/www/blog.ryangiglio.com/public_html
    ErrorLog /var/www/blog.ryangiglio.com/error.log
    # CustomLog /var/www/blog.ryangiglio.com/access.log combined

  <Directory /var/www/blog.ryangiglio.com/public_html/>
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
SSLCertificateFile /etc/letsencrypt/live/blog.ryangiglio.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/blog.ryangiglio.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
</IfModule>

我在这两个文件中都没有看到任何可能导致错误的内容。有人有什么建议吗?

谢谢

【问题讨论】:

    标签: apache mod-rewrite https url-rewriting virtualhost


    【解决方案1】:

    至少我可以告诉你,你被重定向代码 301(=永久)。通常只有当你告诉你的 Apache 这样做时才会出现这种情况。我不完全确定 %{SERVER_NAME} 填充了什么,但您的重写是“永久的”。我会试试这个:

    RewriteCond %{HTTPS} !=on
    RewriteRule .? https://blog.ryangiglio.com%{REQUEST_URI} [END,QSA,R=301]
    

    R=301 和 R=permanent 是一样的,参数的顺序无关紧要。

    【讨论】:

    • 第一个似乎仍然重定向到 www.blog.ryangiglio.com。第二个根本不执行重定向,只显示文档根目录。
    • 1) 所以“服务器名”似乎包括“www”。 2) blog.ryangiglio.com 应该只被重写为blog.ryangiglio.com 与初始请求具有相同的URI。以为这是您的要求...最终您可以详细说明要调用的内容,预期的结果是什么以及得到的结果。
    • 1) 你能想到 SERVER_NAME 包含 www 的原因吗? 2)抱歉,如果我不清楚 - 对于您提供的第二个选项,它是停留在 http 并显示网站,而不是将您发送到 https
    • 1) 不,我不能。只是看起来像。也找不到任何指向这种行为的东西。 2)帮我一个忙,试试这个(见编辑)
    • 由于浏览器缓存,调试起来非常困难,但似乎第二个仍然以某种方式包括 www?我暂时将其保留下来,以便您自己查看。 (编辑)实际上不,我不这么认为 - 我认为它只是停留在 http 上并显示......一个完全不相关的虚拟主机,这是另一个非常奇怪的行为
    猜你喜欢
    • 2021-12-12
    • 2019-06-24
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2017-04-09
    • 2018-02-12
    • 2019-11-01
    • 1970-01-01
    相关资源
    最近更新 更多