2

我在想出正确的语法来完成强制 SSL 和没有 WWW 时遇到了麻烦。

编辑

我已经能够分别完成每项任务,但是当将两者结合起来时,我发现自己陷入了重定向循环。

强制没有 WWW 的工作语法:

RewriteCond %{HTTP_HOST} !^domain\.com$
RewriteRule (.*) http://domain.com/$1 [R=301,L]

我试图强制没有 WWW 和 SSL

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} !^domain\.com$
RewriteRule (.*) https://domain.com/$1 [R=301,L]

感谢您的任何建议!

4

4 回答 4

1

对于 SSL,您可以使用以下内容:

Redirect / https://domain.com/

仅将其放置在您为 HTTP 而不是 HTTPS 配置的虚拟主机部分中,以免客户端进入无限循环。

于 2011-02-07T15:52:46.193 回答
0

'no WWW' 我假设你的意思是你想删除任何'WWW'。主机名的前缀?试试这个:

RewriteCond "%{HTTP_HOST}" "^(?:www\.)?(.*)"  [NC]
RewriteCond "%{HTTPS}"     "=on"
RewriteRule "(.*)"         "https://%1$1"     [R=301,L]

如果您在.htaccess文件中执行此操作,请将最后一行更改为

RewriteRule "(.*)"         "https://%1/$1"    [R=301,L]

如果您希望能够删除“WWW”。前缀不管 SSL 与否,试试这个:

RewriteCond "%{HTTP_HOST}" "^(?:www\.)?(.*)"  [NC]
RewriteCond "%{HTTPS}"     "=on"
RewriteRule "(.*)"         "https://%1/$1"    [R=301,L]

RewriteCond "%{HTTP_HOST}" "^(?:www\.)?(.*)"  [NC]
RewriteRule "(.*)"         "http://%1/$1"     [R=301,L]
于 2011-02-07T15:55:47.073 回答
0

这是我在我的一个网站上使用的 - 它似乎比我见过的大多数其他方法好一点:

  # 下面的代码告诉 apache 总是需要安全 (ssl/tls) 连接
  #到网站。如果客户端尝试通过端口 80 (http://) 连接,
  # 然后客户端将被重定向到 https://(通过端口 443)。
  RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
  RewriteCond %{SERVER_PORT} 80
  重写规则 ^(.*)$ https://example.com/$1 [R,L]

对于无 www 规则,请查看任何开源 CMS(如 Drupal 或 Wordpress)上的 .htaccess 文件,以了解一些最佳实践。

于 2011-02-07T15:57:45.793 回答
0

我发现这适用于我的几个客户网站:

# Force SSL
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule (.*) https://%1%{REQUEST_URI} [L,R=301]

# Rewrite all http to https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
于 2014-09-08T15:26:56.053 回答