【问题标题】:.htaccess HTTP to HTTPS AND non-www to www.htaccess HTTP 到 HTTPS 和非 www 到 www
【发布时间】:2013-04-22 02:50:37
【问题描述】:

我目前有一些规则可以将http://domain.com 定向到https://www.domain.com,但对于http://www.domain.com 不起作用(我猜它不匹配?),它应该重定向到https://www.domain.com。有人可以修改以下内容吗?我已经尝试了很多东西,但都没有成功,这是我第一次使用 .htaccess 重写规则。

TL;DR,我需要同时重定向到 WWW 和 HTTPS

RewriteEngine On

RewriteRule .? - [E=PROTO:http]

RewriteCond %{HTTPS} =on
RewriteRule .? - [E=PROTO:https]

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

编辑:我找到了以下代码,它有些工作 - 它重定向到 https://www.domain.com,但它给出了“重定向过多”错误。

RewriteEngine On
RewriteBase / 
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} (www\.)?(.+)$ [NC]
RewriteRule ^ https://www\.%2%{REQUEST_URI} [L,R=301] 

【问题讨论】:

  • 您可以访问服务器配置吗?

标签: apache .htaccess


【解决方案1】:

这是我使用的规则:

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

如果有必要,您可以将 RewriteCond %{HTTPS} !=on 作为强制删除 https 的第一个条件...

希望对您有所帮助...

【讨论】:

    【解决方案2】:

    你尝试过这样的事情吗?

    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]
    

    最好在服务器的 VirtualHost 中修改这个。

    NameVirtualHost *:80
     <VirtualHost *:80>
     ServerName www.domain.com
     ServerAlias domain.com
     Redirect permanent / https://www.domain.com/
     </VirtualHost>
    
     <VirtualHost _default_:443>
     ServerName www.domain.com
     DocumentRoot /www/
     SSLEngine On
     # etc...
    </VirtualHost>
    

    【讨论】:

    • 这部分有效,就像我的示例中的第二个一样。即,它更改为 https://www,但我收到错误 310 (net::ERR_TOO_MANY_REDIRECTS):重定向太多。此“修复”适用于 cPanel 环境中的许多客户端,因此实际上无法修改虚拟主机。
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 2021-03-25
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多