强制非WWW,但强制https跨所有wordpress&整个域

时间:2015-12-21 21:27:43

标签: 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]

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

问题回顾

  • examplewebsite.com(主网站)被正确强制总是使用https,并且也被迫删除www。但是......问题出在examplewebsite.com/wp-admin/上,它仍然正确地强制https(通过规则或通过wp-config.php强制管理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 Config(覆盖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%相同,唯一的例外是没有自定义代码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 Config(覆盖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)

1 个答案:

答案 0 :(得分:0)

要检查的步骤(我只是为一个网站说明):

  1. ping www.examplewebsite.com预期结果:你应该看到ip 您网站的地址
  2. ping examplewebsite.com预期结果:你应该看到ip地址 您的网站
  3. 浏览https://examplewebsite.com以确保您可以浏览。{ 站点
  4. 将以下内容添加为您的CUSTOM CODE WP REWRITE LOOP的开头 从根目录开始.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     浏览器

  5. 最后一部分是你的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的

  6. 因为您只启用了完整站点作为ssl访问权限,所以wp-config.php文件中不需要以下内容:

    define('FORCE_SSL_ADMIN', true);
    define('FORCE_SSL_LOGIN', true);