![使用 .htaccess 在子文件夹中强制使用 HTTPS](https://linux22.com/image/1537328/%E4%BD%BF%E7%94%A8%20.htaccess%20%E5%9C%A8%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E5%BC%BA%E5%88%B6%E4%BD%BF%E7%94%A8%20HTTPS.png)
我无法让 .htaccess 文件强制使用 HTTPS 流量
如果我通过 FTP 连接到托管服务提供商,我看到的站点结构如下:
/
domains
mydomainname.com
public_html
blog
- 我的网站文件以
public_html
(index.html
etc)开头 - 我有一个 WordPress 安装
blog
- Wordpress 设置已设置为 https:(常规设置中提及
https://www.mydomainname.com/blog
的 Wordpress URL)。 - 如果我访问域名,SSL 证书可以正常工作
.htaccess
最初,中只有一个blog
,包含:
# 开始 WordPress
RewriteEngine 在
RewriteBase /blog/
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
# 结束 WordPress
我看到的各种教程都提到我应该将其添加到开头.htaccess
:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.mydomainname.com/$1 [R,L]
.. 我应该将此文件放在“我的网站根目录中”。
如果我没有(其他).htaccess
文件:
- 我可以浏览,转到
https://www.mydomainname.com
,按照链接进入 WP 博客并在那里浏览,全部 https: - 如果我访问
http://www.mydomainname.com
,并按照链接进入 WP 博客,这些链接将变成 https:
如果我将修改后的 htaccess 放在多个位置,我会遇到如下问题(取决于.htaccess
我尝试的内容/位置):
- 如果我去,
www.mydomainname.com
它会重定向到https://www.mydomainname.com
并且我得到“找不到服务器”;或者: - 不强制从 http: 到 https:
问题:
- 应该
.htaccess
放在mydomainname.com
还是public_html
(即哪个文件夹是那个著名的“我的站点的根目录”)?我都试过了。 - 一定要还放在 中吗
blog
?如果是,它们需要完全相同吗? - 该文件的正确内容是什么
.htaccess
?
我尝试了各种各样的变化,但无法让它发挥作用——显然还不是正确的变化。
顺便说一句:我假设我的托管服务提供商使用 Apache。我无法控制其配置。
答案1
我认为你应该将新的 .htaccess 文件放在 public_html 文件夹中。
尝试下列的使用 .htaccess 文件中的 mod_rewrite
RewriteEngine On
# This will enable the Rewrite capabilities
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e. http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf or .htaccess context
这三行还必须添加到blog
文件夹中的 .htaccess 文件,修改RewriteRule
以反映该子文件夹:
RewriteRule ^/?(.*) https://%{SERVER_NAME}/blog/$1 [R,L]
应用 mod_ssl 强制使用 SSL 可能也很有用SSLRequireSSL指示:
此指令禁止访问,除非当前连接启用了 HTTP over SSL(即 HTTPS)。这在启用 SSL 的虚拟主机或目录中非常方便,可以防止配置错误暴露应受保护的内容。当存在此指令时,所有未使用 SSL 的请求都将被拒绝。请记住,这本身不会重定向到 https。
答案2
这是本文的摘要 强制 WordPress 网站所有页面使用 HTTPS 描述如何通过 HTTPS 确保整个 WordPress 博客的安全。
强制管理员和登录页面使用 SSL
将以下行添加到wp-config.php
WordPress 目录根目录下的文件中:
define('FORCE_SSL_ADMIN', true);
在“设置”中设置 https
在 WordPress 管理员仪表板中,转到Settings -> General
并将两个 URL 更改https://
为http://
:
更新 .htaccess
.htaccess
在WordPress 应用程序根目录下的文件 中添加重写规则:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
添加了两行代码,表示如果当前端口不是 443,则重写 URL 以使用带有 301 重定向的 HTTPS:
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
- 清空应用程序的所有缓存