【问题标题】:force SSL and no WWW on Apache在 Apache 上强制 SSL 和没有 WWW
【发布时间】:2014-09-08 23:26:56
【问题描述】:

我在想出正确的语法来完成强制 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]

感谢您的任何建议!

【问题讨论】:

    标签: apache mod-rewrite ssl no-www


    【解决方案1】:

    对于 SSL,您可以使用类似:

    Redirect / https://domain.com/
    

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

    【讨论】:

      【解决方案2】:

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

      # 下面的代码告诉 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 文件,了解一些最佳做法。

      【讨论】:

      • 您的语法非常适合重定向到 SSL,谢谢。不幸的是,我可以分别完成这两项壮举,但是当将它们结合起来时,我发现自己陷入了重定向循环。 RewriteCond %{HTTP_HOST} !^domain\.com$ RewriteRule (.*) domain.com/$1 [R=301,L]
      • 是的...这是个问题,不是吗。我不必在我的任何网站上同时进行这两项操作。
      • 是的,这也是我第一次遇到它。我必须强制使用一种类型的 URL 系统,以便我的 Jquery 帖子与父 url 匹配。 (例如:如果 URL 是 domain.com jquery 必须使用 domain.com 而不是 www.domain.com)
      【解决方案3】:

      “没有 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]
      

      【讨论】:

      • @RoUS 我无法让这些示例中的任何一个正常工作。
      • @Stephen 到底发生了什么? (/我去验证)
      • @RoUS 绝对没有任何反应。
      • 好的,我正在尝试让我的测试系统再次运行。我会尽快发表评论。
      • @RoUS 记录我是使用 .htaccess
      【解决方案4】:

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

      # 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}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-02
        • 2015-07-18
        • 2023-03-27
        • 2013-01-19
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多