wordpress - 强制非 WWW 但强制 https 跨所有 wordpress 和整个域

标签 wordpress apache .htaccess mod-rewrite url-rewriting

我在安装多个 wordpress 和 .htaccess 时遇到了一些问题重写规则,主要用于强制https但也删除www。来自任何域。

域/子域:

  • WordPress 1:examplewebsite.com ( /home/hostingacc/public_html/ )
  • WordPress 2:test.examplewebsite.com ( /home/hostingacc/public_html/test/ )
  • WordPress 3:moretests.examplewebsite.com ( /home/hostingacc/public_html/moretests )

  • .htaccess 重写

    我尝试使用我在互联网上找到的几种重写规则,不确定哪一种是最好的,但以下是我使用的主要重写规则
    RewriteEngine On
    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
    RewriteRule ^ http%2://%1%{REQUEST_URI} [R=301,L]
    

    我从 https://github.com/h5bp/server-configs-apache/issues/48 得到的但如前所述,其中之一可能更适合 强制使用 HTTPS 并强制删除 WWW
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80 [OR]
    RewriteCond %{HTTP_HOST} ^www.examplewebsite.com
    RewriteRule ^(.*)$ https://examplewebsite.com/$1 [L,R=301]
    

    或者
    RewriteEngine On
    RewriteCond %{HTTPS} !=on  [OR]
    RewriteCond %{HTTP_HOST} !^examplewebsite\.com$ [NC]
    RewriteRule ^ https://examplewebsite.com%{REQUEST_URI} [R=301,L] 
    

    或者
    RewriteEngine On
    RewriteCond %{HTTPS} !=on  
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    RewriteCond %{HTTP_HOST} ^www*\.(.*examplewebsite\.com)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
    

    或者
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www*\.(.*examplewebsite\.com)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    上述所有规则似乎都适用于在主 wordpress 安装上强制 https 和删除 www,但这些规则目前不适用于子域或 /wp-admin/每个 wordpress 安装的子目录,我认为这是因为有一个 .htaccess每个目录中的文件。

    问题回顾
  • examplewebsite.com(主网站)被正确地强制始终使用 https,并且也被强制删除 www。但是...问题位于 examplewebsite.com/wp-admin/上,它仍然正确地强制使用 https(通过规则或通过 wp-config.php force admin ssl,但它不会强行删除 www. 对于某些原因,我猜是因为我在/wp-admin/文件夹下有以下 .htaccess 文件,所以看起来我需要一个规则来让这个文件夹中的 htaccess 强行删除 www. 并强制 https。
  • test.examplewebsite.com 和 moretests.examplewebsite.com(子域)都存在一个问题,即它不强制使用 https,也不强制删除 www。
  • test.examplewebsite.com 和 moretests.examplewebsite.com(子域)也有同样的问题,因为第一个/wp-admin/没有强行删除 www。
  • 如果我进入我的子域的设置或 SQL,甚至编辑 wp-config.php 以覆盖 SQL 并将站点 url 和主页 url 更改为具有 https 而不是具有 www。 (https 导致此问题)然后 wordpress 安装变得无法访问,它们消失并访问子域的链接重定向/加载主网站

  • 配置
  • examplewebsite.com - 当前 .htaccess 文件

  • 首页: http://pastebin.com/raw/9RNuQZS5
    WP 管理员: http://pastebin.com/raw/8vVnDTRx
  • examplewebsite.com - SQL 变量

  • 网站网址(首页): https://www.examplewebsite.com
    WordPress 网址: https://www.examplewebsite.com
  • examplewebsite.com - WP 配置(覆盖 SQL)

  • 配置:
    define('FORCE_SSL_ADMIN', true);
    define('FORCE_SSL_LOGIN', true);
    
    define('WP_HOME','https://examplewebsite.com');
    define('WP_SITEURL','https://examplewebsite.com');
    define('DOMAIN_CURRENT_SITE', 'examplewebsite.com' );
    define('COOKIE_DOMAIN', 'examplewebsite.com' );
    define('ADMIN_COOKIE_PATH', '/wp-admin/');
    
  • test.examplewebsite.com 和 moretests.examplewebsite.com

  • 子域都设置如下,但是目前没有应用 wp-config,因为强制 https 导致 第 4 期。

    .htaccess 文件与主域/站点上的文件 99% 相同,唯一的异常(exception)是没有 自定义代码 wp 重写循环 规则(从 www 重定向到非 www 并将 http 重定向到 https)
  • test.examplewebsite.com 和 moretests.examplewebsite.com - SQL 变量

  • 网站网址(首页): http://test.examplewebsite.com
    WordPress 网址: http://test.examplewebsite.com
  • test.examplewebsite.com 和 moretests.examplewebsite.com - WP 配置(覆盖 SQL)

  • 配置:
    define('FORCE_SSL_ADMIN', true);
    define('FORCE_SSL_LOGIN', true);
    
    define('WP_HOME','https://test.examplewebsite.com');
    define('WP_SITEURL','https://test.examplewebsite.com');
    define('DOMAIN_CURRENT_SITE', 'test.examplewebsite.com' );
    define('COOKIE_DOMAIN', 'test.examplewebsite.com' );
    define('ADMIN_COOKIE_PATH', '/wp-admin/');  
    

    设置上述内容,导致与 SQL 更改相同的问题 (第 4 期)

    最佳答案

    检查步骤(我只是举例说明一个站点):

  • ping www.examplewebsite.com 预期结果:您应该看到 ip
    您的网站地址
  • ping examplewebsite.com 预期结果:您应该看到 ip 地址
    您的网站
  • 浏览到 https://examplewebsite.com以确保您可以浏览
    网站
  • 添加以下作为您的自定义代码 WP 重写循环的开始
    在您的根 .htaccess 中启动:
    # CUSTOM CODE WP REWRITE LOOP START
    # WP REWRITE LOOP START
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://examplewebsite.com/$1 [R,L]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    

    以上是为了确保将所有非ssl访问重定向到ssl访问
    将所有对站点的非 ssl 访问重命名为 examplewebsite.com,现在
    你应该被重定向到 https://examplewebsite.com如果你输入
    http://www.examplewebsite.comhttp://examplewebsite.com在里面
    浏览器
  • 最后一部分是让您的 wp-config.php 文件包含
    下列的:
    define('WP_HOME','https://examplewebsite.com');
    define('WP_SITEURL','https://examplewebsite.com');
    define('DOMAIN_CURRENT_SITE', 'examplewebsite.com' );
    define('COOKIE_DOMAIN', 'examplewebsite.com' );
    define('ADMIN_COOKIE_PATH', '/wp-admin/');
    

    这部分是为了确保即使 ssl 访问您的
    www.examplewebsite.com 被重写为 examplewebsite.com
    wordpress

  • 因为您仅将完整站点启用为 ssl 访问,所以您的 wp-config.php 文件中不需要以下内容:
    define('FORCE_SSL_ADMIN', true);
    define('FORCE_SSL_LOGIN', true);
    

    关于wordpress - 强制非 WWW 但强制 https 跨所有 wordpress 和整个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404609/

    相关文章:

    php - php 会停止在 windows 二进制文件中支持 apache 吗?

    php - 将站点中的所有链接重定向到重定向页面

    php - 503 服务不可用,PHP 5.3 Web 应用程序

    MySQL CAST 函数不起作用并作为列名输出

    Apache 服务器 - 内容类型 HTTP header

    Apache 相当于 Nginx `proxy_buffering off`

    php - 我如何解决 "PHP Fatal error: Unknown: Failed opening required"

    .htaccess - htaccess 永久重定向抛出内部服务器错误

    php - 将 "Zero Tax"费率设置为一些自定义预订产品类型

    json - Wordpress REST API _fields 和 _embed 参数不能同时工作