2015-04-06 41 views
0

我一直在尝试使用apache .htaccess规则来强制所有网址为https://www.
对于那些撇清这一点,请记住,我不能使用由于多种原因,重写规则中的“domain.com”。
如:如何正确强制使用https和www .htaccess

https://domain.com to https://www.domain.com
http://domain.com to https://www.domain.com
http://www.domain.com to https://www.domain.com
但是......


在我的情况我有这么多的领域(由于是一个WordPress的多点),要添加规则对于每个单独的域来说都是非常低效的。由于我在网络模式下使用wordpress MS,我有几个网站被映射到基本网址,特别是当试图以非mod重写的方式强制https时,这些网站似乎很容易中断。然后,我需要确保所有域名使用www,但MU域名映射不强制WWW从网络模式的根网站...这是一种模式,允许通过WP多网络插件网站分离网络。所以这意味着我需要通过mod重写强制这个。
我在网上发现了这些变化,但我不确定最干净的方法是什么?

## force HTTPS and www RewriteCond %{HTTP_HOST} (?!^www\.)^(.+)$ [OR] RewriteCond %{HTTPS} off RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^(dev|www)\. [NC] RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI}/ [R=302,L] RewriteCond %{HTTPS} off RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI}/ [R=302,L]

RewriteCond %{HTTP_HOST} !^www\. [NC,OR] RewriteCond %{HTTPS} off RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI}/ [R=302,L]

什么是实现这一目标的最佳方式是什么? 谢谢

回答

0

您可以使用此单一的规则对所有3个条件:

## force HTTPS and www 
RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://www.%1%{REQUEST_URI} [L,R=302,NE] 

注释掉,当你在一个新的浏览器测试以避免旧的浏览器缓存中的所有其他规则。

+0

嗨,我想你可能错过了我的主机条件@anubhava ...我无法在重写规则中单独识别每个域..他们变化太频繁,太多了....我在想需要'%{HTTP_HOST}%{REQUEST_URI}'来完成这项工作? – 2015-04-06 11:26:07

+0

只注意到WP标签。你在WP设置中的家庭和网站URL究竟是什么? – anubhava 2015-04-06 11:28:28

+0

这是我的wp-config:
'define('WP_DEBUG',false); define('DISALLOW_FILE_EDIT',true); define('DISALLOW_FILE_MODS',false); define('WP_MEMORY_LIMIT','512M'); define('WP_ALLOW_REPAIR',false); /*多站点*/ define('WP_ALLOW_MULTISITE',true); define('MULTISITE',true); define('SUBDOMAIN_INSTALL',false); define('DOMAIN_CURRENT_SITE',$ _SERVER ['HTTP_HOST']); define('PATH_CURRENT_SITE','/'); define('BP_ENABLE_MULTIBLOG',true);'每个站点的主页和站点URL是不同的......它对于网站是“/”。 – 2015-04-06 11:34:59