【问题标题】:How to use ONLY .htaccess to force HTTPS on all pages on WordPress site hosted on 1and1如何仅使用 .htaccess 在 1and1 上托管的 WordPress 网站上的所有页面上强制使用 HTTPS
【发布时间】:2018-11-09 16:15:51
【问题描述】:

在激活我从 1and1 托管收到的免费 SSL 证书后,我不知疲倦地尝试强制 HTTPS 访问我的整个 WordPress 网站,以便将所有过去的 HTTP 链接重定向到 HTTPS。我想通过仅修改我的 web 文件夹根目录中的 .htaccess 文件来强制使用 HTTPS。我尝试了在网上找到的多个示例,包括:

http://www.wpbeginner.com/wp-tutorials/how-to-add-ssl-and-https-in-wordpress/

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R,L]
</IfModule>

https://www.1and1.com/digitalguide/hosting/technical-matters/the-ten-best-htaccess-tricks/

<IfModule mod_rewrite.c>
# activate HTTPS
RewriteEngine On
RewirteCond %{Server_Port} !=443
RewriteRule ^(.*)$ http://yourdomain.tld/$1 [R=301, L]
</IfModule>

在尝试了所有这些修改 .htaccess 文件的方法后,都没有奏效。我终于遇到了这个Stack Overflow question 并将PHP 代码块放在我当前主题文件夹的functions.php 文件中。代码如下:

if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
    if(!headers_sent()) {
        header("Status: 301 Moved Permanently");
        header(sprintf(
            'Location: https://%s%s',
            $_SERVER['HTTP_HOST'],
            $_SERVER['REQUEST_URI']
        ));
        exit();
    }
}

这个 PHP 代码实现了强制所有链接到 HTTPS 的目标。但是,我希望保持我的代码干净并将其全部保留在 .htaccess 文件中以便更好地组织,因此我不必记住每次更改 WordPress 的主题时都将 PHP 代码添加到 functions.php 文件中网站。

谁能解释一下如何通过仅修改 .htaccess 文件来完成强制 HTTPS 或解释我可能出错的地方?

我的 .htaccess 文件中唯一有效的代码块是:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

AddHandler x-mapp-php5.5  .php

我已经将“WordPress 地址 (URL)”和“站点地址 (URL)”的 WordPress 设置更改为“https://example.com/”。

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite https


    【解决方案1】:

    根据Apache documentationhttp 等必须重定向到https 的请求最好由Redirect 指令处理。该指令将进入服务器配置文件。

    如果您只能访问 .htaccess,那么您应该能够使用以下内容:

    RewriteEngine On
    RewriteCond %{HTTPS} !on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    【讨论】:

    • 我试过了,还是不行。当我访问指向我的站点的链接并将架构从 https 更改为 http 时,它会停留在 http 并且未升级。我很欣赏这个建议,但是@justin-r
    • 我只能访问 .htaccess 文件。我正在使用共享主机。
    • 您无法编辑重定向。要修改重定向,您必须将其删除,然后重新创建。
    【解决方案2】:

    在 .htaccess 文件上试试这个

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =abc.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    

    【讨论】:

      【解决方案3】:

      你很亲密。应该是:

      RewriteEngine On
      RewriteCond %{SERVER_PORT} !=443
      RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
      

      我只需要在我们基于 Windows 的托管包上与他们(现在的 Ionos)一起执行此操作。我不确定他们为什么需要使用 .htaccess 而不是 web.config 进行重写。我不喜欢的是,由于某种我觉得烦人的原因,这会放入双斜线,并且删除它们的标准方法不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-29
        相关资源
        最近更新 更多