15

我的 Wordpress 目录位于 www.example.com/blog

我最近更改了我的整个网站以强制使用 HTTPS。所以我在 /blog/ 中的 .htaccess 文件如下所示:

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

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

我还将 Wordpress 设置中的站点 URL 更改为 HTTPS。

这在主页中非常有效,但在任何帖子页面中,最终用户都可以通过更改 URL 并按 Enter 来更改为非安全 HTTP。

例如,他们可以直接键入:http ://www.example.com/blog/post-1/ ,它将作为 HTTP 加载。

我的 .htaccess 文件有什么问题?松散的一端在哪里?

4

2 回答 2

36

改变规则的顺序。首先重定向到https然后让 WP 接管您的所有请求。

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
于 2013-10-03T20:24:35.390 回答
0

您也可以将这两行添加到 wp-config.php

define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);

因此,您可以轻松地为开发环境的 http 和 live 的 https 设置条件,如下所示:

if(strpos($_SERVER['HTTP_HOST'], 'livedomain.com') !== FALSE){
  define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
  define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
} else {
  define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
  define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
}
于 2014-10-01T16:45:41.640 回答