Php 使用htaccess重定向http://www,http://及https://www 至https:

Php 使用htaccess重定向http://www,http://及https://www 至https:,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,在我的站点上,我在域的非www版本上安装了SSL证书。我想使用htaccess将http-www、http-non-www和https-www重定向到https:// 我的www-to-non-www正在工作,但https-www没有重定向到https-non-www。以下是我的htaccess中的内容: Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]

在我的站点上,我在域的非www版本上安装了SSL证书。我想使用htaccess将http-www、http-non-www和https-www重定向到https://

我的www-to-non-www正在工作,但https-www没有重定向到https-non-www。以下是我的htaccess中的内容:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ link [R=301,L]

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https link [R,L]
谁能帮我找出我遗漏了什么


Sharon

您可以使用:用于http或https,带或不带www->不带www的https

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
相反:对于http或https,有或没有www->https和www

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

根据您的评论,这里有一条规则可以在单个规则中执行以下重定向:

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

http://www.domain.com/foobar  => https://www.domain.com/foobar
http://domain.com/foobar      => https://www.domain.com/foobar
https://domain.com/foobar     => https://www.domain.com/foobar
https://www.domain.com/foobar => Unchanged

由于某种原因,它不允许我发布实际的链接,所以我用“链接”替换了它们。谢谢事实证明,现在我需要做相反的事情。将http www、http非www和https非www重定向到。我该如何改变这一点?有什么答案我可以参考吗?谢谢你的帮助!是-一个将http www、http non www和https non www重定向到https www的规则。结果表明,现在我需要的是相反的方向。将http www、http非www和https非www重定向到。我该如何改变这一点?谢谢你的帮助!这个https://%{HTTP\u HOST}%{REQUEST\u URI}应该被替换为实际的域吗?不,它是自动的,您不需要更改任何东西,
%1%
的作用是什么?这是我遇到的最佳解决方案中捕获组的反向引用,因为它不需要硬编码域名。非常感谢。