【问题标题】:How to do 301 redirect http to https in apache when website listening port 80 and 443?当网站监听端口 80 和 443 时,如何在 apache 中将 http 重定向到 https 的 301?
【发布时间】:2026-01-29 02:45:01
【问题描述】:

我正在使用 apache2.4 并使用 drupal 7 配置网站。网站在端口 80 上,并且在端口 443 上启用了 ssl。 我已通过网站管理员登录将主页重定向到 https,但在检查 301 重定向时,它说 URL 是 应该使用 302 临时重定向而不是这个 301 永久重定向来重定向,因为这是 被认为是 SEO 友好的重定向方法。到目前为止我使用的唯一重定向是

RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301,NC] 

但它没有从 http 重定向到 https 。我什至尝试遵循规则

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www.domain\.com*
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]

谁能帮我永久重定向它。

【问题讨论】:

    标签: apache .htaccess redirect drupal-7 seo


    【解决方案1】:

    您的规则应永久重定向。 检查您的代码是否在 htaccess 之上。

    另外我认为您想检查请求是否不在 https 上并与您的域匹配:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^www\.domain\.com
    RewriteRule (.*) https://www.domain.com%{REQUEST_URI} [L,R=301]
    

    我认为比 htaccess 更好的方法是取消虚拟主机文件 - 所以网络服务器不需要重新启动 htaccess: https://wiki.apache.org/httpd/RedirectSSL

    <VirtualHost *:80>
       ServerName www.example.com
       Redirect permanent / https://secure.example.com/
    </VirtualHost>
    

    【讨论】:

    • 非常感谢您的回复,看起来我就在解决方案附近。我尝试了您的第一个重写规则,即 RewriteCond %{HTTPS} off & 接下来的两行。它显示 301 主页。但是,当我单击更多链接时,页面不显示并且它给我错误说重定向太多。请建议
    • 嗯.. 检查你的其他重定向规则,也许有一个重定向到 http://,所以你陷入了重定向循环。