【问题标题】:Use .htaccess to force www AND https使用 .htaccess 强制 www 和 https
【发布时间】:2013-05-31 06:35:37
【问题描述】:

我们有一个包含一个主站点和一个子站点的 WP Multisite 安装。 我们刚刚从 Godaddy 购买了 UCC 证书,并希望使用 https 保护整个网站。

我们希望: 将 domain.com 重定向到 www.domain.com 将http://www.domain.com 重定向到https://www.domain.com

换句话说,对所有内容强制使用 www 和 https..

我已尝试对我们的 .htaccess 文件进行一些修改,但均未成功。似乎会导致 Google Chrome 出现问题。

提前感谢您的任何反馈或建议!

S 克兰斯顿

这是我当前的 .htaccess 文件:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On 
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# CSS
ExpiresByType text/css "access 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 year"
<IfModule mod_headers.c>
   SetEnvIf Origin "http(s)?://(www\.)?(www.simplymusicteachers.com/wp-admin/admin-ajax.php|www.simplymusicteachers.com)$" AccessControlAllowOrigin=$0$1
   Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
</IfModule>

这里是添加了附加代码的文件:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On 
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# CSS
ExpiresByType text/css "access 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 year"
<IfModule mod_headers.c>
   SetEnvIf Origin "http(s)?://(www\.)?(www.simplymusicteachers.com/wp-admin/admin-ajax.php|www.simplymusicteachers.com)$" AccessControlAllowOrigin=$0$1
   Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
</IfModule>
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## force HTTPS and www. if any of them are not already present
RewriteCond %{HTTP_HOST} (?!^www\.)^(.+)$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=302,L]

【问题讨论】:

  • 我找到了这个线程并尝试了它:stackoverflow.com/questions/8929623/…,但我在谷歌浏览器中收到了旧的错误消息:错误 310 (net::ERR_TOO_MANY_REDIRECTS): 重定向太多。
  • 非常感谢您的回复,阿努巴瓦。我试图弄清楚如何通过 httpd.conf 启用 mod_rewrite 和 .htaccess 。我相信 .htaccess 已启用,因为该文件位于我的根目录中。我仍在尝试解决 httpd.conf 部分;有什么建议吗?
  • 你在错误的地方留下了这个评论,请在我的答案下方留下评论,以便我收到通知。建议您尝试我的答案,如果有任何问题,请告诉我。

标签: .htaccess google-chrome ssl https http-redirect


【解决方案1】:

通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## force HTTPS and www. if any of them are not already present
RewriteCond %{HTTP_HOST} (?!^www\.)^(.+)$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=302,L]

一旦您确认它工作正常,请将R=302 替换为R=301。在测试你的 mod_rewrite 规则时避免使用R=301(永久重定向)。

编辑如果由于某种原因不支持后视,请尝试:

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

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

【讨论】:

  • 我想试试你的答案,但我不确定语法是否正确。我做了一些研究并试图弄清楚,但没有成功。我也没有提到我们需要将主站点 domain.com 重定向到 domain.com 以及 sub.domain.com 到 sub.domain.com 。这增加了一层复杂性。仍然有问题..
  • 好的,现在检查编辑的答案,这对domain.comsub.domain.com都有效
  • 我们实际上需要将主站点 domain.com 重定向到 www dot domain.com 以及将 sub.domain.com 重定向到 www.dot sub.domain.com 。这增加了一层复杂性。仍然有问题..
  • 正如我已经写过的,最新的编辑可以处理这两种情况。我自己在 Apache 上测试后发布了它。
  • 那么我是否只是将您的代码粘贴到我的 .htaccess 文件中?至于将代码放在 DOCUMENT_ROOT 目录下,我仍然不知所措。感谢您的帮助!
猜你喜欢
  • 2016-04-05
  • 1970-01-01
  • 2014-01-20
  • 2011-09-14
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2016-06-15
相关资源
最近更新 更多