将www.重定向到非www,并使用.htaccess将所有http重定向到https

将www.重定向到非www,并使用.htaccess将所有http重定向到https,.htaccess,redirect,mod-rewrite,.htaccess,Redirect,Mod Rewrite,无数次被问到这个问题,但在阅读了这里的许多答案之后,我仍然无法理解这个问题。我需要重定向所有请求,如下所示: > > > >(当.htaccess放置在子域文件夹中时) 到目前为止,我一直在使用HTML5样板文件中的代码,将www解析为非www <IfModule mod_rewrite.c> RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ htt

无数次被问到这个问题,但在阅读了这里的许多答案之后,我仍然无法理解这个问题。我需要重定向所有请求,如下所示:

  • >
  • >
  • >
  • >(当.htaccess放置在子域文件夹中时)
  • 到目前为止,我一直在使用HTML5样板文件中的代码,将www解析为非www

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

    要在单个http请求中重定向到https和非www,可以使用

    RewriteEngine on
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
    RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R]
    

    测试此规则之前,请清除浏览器的缓存。

    有时,根据某些服务器配置,
    HTTPS
    变量似乎总是设置为
    off
    。这就解释了这个循环,我已经看到了类似的例子

    一个简单的解决方法是测试
    服务器\u端口
    (如果使用默认的80和443),或者也可以测试
    HTTP:X-Forwarded-Proto

    示例(1)测试它是否为
    https

    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    
    RewriteCond %{SERVER_PORT} !403
    
    示例(2)测试它是否为
    https

    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    
    RewriteCond %{SERVER_PORT} !403
    

    尝试过了,但在清理缓存和硬加载之后,我仍然在Chrome中得到“ERR_TOO_MANY_REDIRECTS”。我理解正确,但在那之后,它正在加载并抛出错误。您是否使用cloud flare?不,我没有使用CF或任何其他CDN。我刚刚安装了Let's Encrypt certificate并想使用它(如果我直接转到https:page或使用www.domain,它可以正常工作)谢谢Justin,示例1在所有主机上都能完美工作,示例2的行为与其他主机相同,在一个主机上有太多重定向SSO,示例2工作,示例1不工作。很高兴有所有可能的解决方案!