使用 .htaccess 在子文件夹中强制使用 HTTPS

使用 .htaccess 在子文件夹中强制使用 HTTPS

我无法让 .htaccess 文件强制使用 HTTPS 流量

如果我通过 FTP 连接到托管服务提供商,我看到的站点结构如下:

/
  domains
    mydomainname.com
      public_html
        blog
  • 我的网站文件以public_html( index.htmletc)开头
  • 我有一个 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 博客的安全。

  1. 强制管理员和登录页面使用 SSL
    将以下行添加到wp-config.phpWordPress 目录根目录下的文件中:
    define('FORCE_SSL_ADMIN', true);

  2. 在“设置”中设置 https
    在 WordPress 管理员仪表板中,转到Settings -> General并将两个 URL 更改https://http://
    在此处输入图片描述

  3. 更新 .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]
  1. 清空应用程序的所有缓存

相关内容