【问题标题】:Redirect to HTTP non-www to HTTPS www htaccess重定向到 HTTP 非 www 到 HTTPS www htaccess
【发布时间】:2013-07-01 11:06:49
【问题描述】:

我想使用 HTTPS 协议从任何方向重定向到我们的网站,但有些重定向不起作用。我想要这个:

  • http://www.site.cohttps://www.site.co
  • http://site.cohttps://www.site.co

这是我的 htaccess:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 

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

第二条规则不起作用。它会在我们的站点内转到另一个方向,并且不会重定向到 HTTPS 站点。

【问题讨论】:

标签: .htaccess


【解决方案1】:

试试这样:

RewriteEngine On

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

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 

这里唯一真正的区别是,首先我们从非 WWW 重定向到 WWW,然后我们检查 HTTPS 并重定向它。

如果不行,试试这个:

RewriteEngine On

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

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

【讨论】:

  • 嗨@Prix,感谢您的回答,但不幸的是仍然不适合我。也许这可能是配置虚拟主机的问题。可能是???
  • @AnibalMauricio 你确定你的 htaccess 或 php 上没有其他东西会导致这种情况吗?
  • 嗯,我刚发现那个页面是apache的默认页面,那么问题肯定是虚拟主机配置的问题吧?
  • @AnibalMauricio 如果文档根目录不同,那么可以。
  • 第二个选项在我的情况下效果更好。我在 OpenCart 中使用过它。非 www 重定向到 https + www,https://site.tld 重定向到 https://www.site.tld
【解决方案2】:

如果您使用 One.com 作为您的虚拟主机,您应该使用以下代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

【讨论】:

    【解决方案3】:

    Prix 的答案有效。为了使其更具动态性,让我们使用 SERVER_NAME 和 REQUEST_URI 而不是静态域名。

    RewriteEngine On
    #we replace domain.com/$1 with %{SERVER_NAME}%{REQUEST_URI}.
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*) https://www.%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
    
    #here we dont use www as non www was already redirected to www.
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
    

    【讨论】:

    • 但是如果我的 URL 是 https://example.com/page 它不会重定向到 WWW。有什么想法吗?
    • 这适用于 Angular 项目,其路径类似于 url,例如 www.example.com/page-one
    【解决方案4】:

    这将用于 www 或非 www 如果您尝试使用 www 打开链接,则 url 使用 www 重定向到 https

    Example : http://domain.com redirect to https://domain.com
    

    或者如果您尝试打开非 www 的链接,则 url 重定向到非 www 的 https

    Example : http://www.domain.com redirect to https://www.domain.com
    
    RewriteEngine on
    
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    【讨论】:

      【解决方案5】:
      RewriteEngine On
      
      RewriteCond %{HTTP_HOST} !^www\. [NC]
      RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
      
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 
      

      【讨论】:

        【解决方案6】:

        对不起,我没有足够的评论点,但@prix 的规则会带来不必要的重定向。

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

        您可以在 GTMETRIX 上尝试http://domain.com/,您将收到此消息

         "Avoid landing page redirects for the following chain of redirected URLs."
        
        http://domain.com/
        http://www.domain.com/
        https://www.domain.com/
        

        为防止这种情况发生,请转到第一个 RewriteRule 并在 http 末尾添加一个“s”。新的规则集如下所示:

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

        【讨论】:

          【解决方案7】:

          例如https://example.com应该是https://www.example.com

          RewriteEngine On
          RewriteCond %{SERVER_PORT} !=443
          RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
          RewriteRule ^(.*)$ "https\:\/\/www\.example\.com\/$1" [R=301,L]
          

          注意 - 您应该将 example.com 更改为您自己的域。

          【讨论】:

          • 我不确定这对现有答案有什么影响 - 但有什么理由不能只使用 example.com 和 www.example.com 吗?
          【解决方案8】:

          这是 http 到 https非 www 到 www 重定向,使用 .htaccess

          如果你想重定向到 https 和 www 你可以使用这个代码

          http 到 https 重定向:

          <IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteCond %{HTTPS} !on
          RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
          </IfModule>
          

          非 www 到 www 重定向:

          <IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteCond %{HTTP_HOST} !^www\. [NC]
          RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
          </IfModule>
          

          如果要使用展位功能,请分别放置以上所有代码

          【讨论】:

          • 如果我们将它们组合在一个RewriteEngine On 语句中的一个&lt;IfModule&gt; 部分中会更好吗?
          【解决方案9】:

          只需将以下内容放入.htaccess 文件中

           RewriteEngine on
          
           RewriteCond %{SERVER_PORT} 80 
           RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
          

          【讨论】:

            【解决方案10】:

            我用这个:

            RewriteEngine On
            
            RewriteCond %{HTTP_HOST} !^www\.
            RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [END,NE,R=permanent]
            

            【讨论】:

              【解决方案11】:

              试试这个方法:

              # Redirect 301 all to https://www
              <IfModule mod_rewrite.c>
                 RewriteCond %{HTTPS} off [OR]
                 RewriteCond %{HTTP_HOST} !^www\. [NC]
                 RewriteCond %{HTTP_HOST} ^(.*)$  [NC]
                 RewriteRule (.*) https://www.example.com/$1 [L,R=301]
              </IfModule>
              

              为什么有时您不需要代码 %{HTTP_HOST} 并在最后一行使用带有 www 的域确切 url,因为通常结果会有两个类似 www:

              https://www.www.yourdomain.com
              

              顺便说一句,如果您使用 cloudflare,只需创建 pagerules 将 301 全部重定向到 https 和 www 版本。

              创建页面规则 填写

              example.com/*
              

              选择设置转发 url 然后选择 301 并填写此

              https://www.example.com/$1
              

              保存后全部重定向到 https 和 www 版本。

              【讨论】:

                【解决方案12】:

                我有一个 asp.net 网站,但主机提供商不支持 IIS 重写模块

                RewriteEngine on
                RewriteBase /
                
                RewriteCond %{HTTP_HOST} !^www\. [NC]
                RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]
                
                RewriteCond %{HTTPS} !on
                RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-11-12
                  • 1970-01-01
                  • 2019-08-12
                  • 2019-02-04
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多