Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 将http和www重定向到https://example.com_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

.htaccess 将http和www重定向到https://example.com

.htaccess 将http和www重定向到https://example.com,.htaccess,redirect,mod-rewrite,.htaccess,Redirect,Mod Rewrite,目标是将HTTP和www永久重定向到https://example.com在具有活动SSL的共享主机服务上 几次尝试;有些涉及如下规则: RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L] 以及其他涉及Rahil Wazir的StackOverflow post等规则的尝试,包括: RewriteEngine on RewriteCond %{HTTP_

目标是将HTTP和www永久重定向到
https://example.com
在具有活动SSL的共享主机服务上

几次尝试;有些涉及如下规则:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

以及其他涉及Rahil Wazir的StackOverflow post等规则的尝试,包括:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} !^443
RewriteRule ^(.*)$ http://example.com/$1 [L, R=301]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} ^443
RewriteRule ^(.*)$ https://example.com/$1 [L, R=301]
到目前为止,没有任何尝试完全达到目标。你能帮忙吗


请注意
https://www.example.com
还应永久重定向到
https://example.com

前提是您没有实现(在这种情况下,您应该实现两个单独的重定向,第一个是在同一主机上的HTTP到HTTPS)然后,您可以在
.htaccess
文件的顶部执行以下操作:

RewriteEngine On

# Redirect HTTP to HTTPS (and www to non-www)
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule (.*) https://example.com/$1 [R=302,L]
HTTPS
服务器变量是检查HTTPS是否启用的另一种方法(可以说更可读),而不是显式检查
server\u端口

注意,这是一个302(临时)重定向。只有在测试其正常工作时,才将其更改为301(永久)重定向

在测试之前,您需要清除浏览器缓存


您发布的指令存在问题:

这只会将HTTP重定向到HTTPS。它不会规范化
https://www.example.com/
。这也是一个临时(302)重定向

除了语法无效(在
重写规则
标志之间有一个空格-这将导致500个内部服务器错误),这只重定向
www
和HTTP。但它重定向到HTTP,而不是HTTPS!因此,它不会规范化/重定向
http://example.com/
https://www.example.com


同样,由于上述原因,
RewriteRule
指令在语法上无效。这仅重定向
www
和HTTPS。因此,它不会规范化
http://example.com/
http://www.example.com

“Rahil Wazir的StackOverflow post”-看起来你指的是什么?但这涉及到一个不同的问题,有着不同的意图!在这个问题上,他们不想将HTTP重定向到HTTPS,而是在规范化www子域时保持相同的方案-这确实是那些指令所做的。谢谢你,怀特先生-你的解决方案工作得很好!
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} !^443
RewriteRule ^(.*)$ http://example.com/$1 [L, R=301]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} ^443
RewriteRule ^(.*)$ https://example.com/$1 [L, R=301]