http到https通过.htaccess

时间:2012-05-07 22:16:26

标签: http .htaccess redirect https

我已经看过现有的问题,但我并没有真正遇到任何对我有用的事情。

我目前正在运行具有安全SSL证书的网站。它可以在https://www.example.co.uk访问,问题是该网站也可以在http://www.example.co.uk访问 - 我不希望这是可能的。我需要它从http重定向到https。

我在.htaccess文件中找到了这一段代码。

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^example.co.uk [NC] 
RewriteRule ^(.*)$ https://example.co.uk/$1 [L,R=301]

当用户将example.co.uk输入他们的地址栏时,这很好用,但我还需要添加某种条件语句,以便用户输入“www.example.co.uk”或“{ {3}}”。

我尝试使用[OR]之类的东西,但这最终会造成服务器错误。

感谢任何帮助和建议。

干杯。

16 个答案:

答案 0 :(得分:153)

尝试以下方法:

 RewriteEngine On
 RewriteCond %{HTTPS} !=on
 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

此外,您还可以根据端口号重定向,例如:

 RewriteCond %{SERVER_PORT} ^80$
 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

这会将端口80上收到的所有请求重定向到HTTPS。

答案 1 :(得分:13)

在.htaccess文件中添加以下代码。

(lol :a)

使用您的网站域名

更改example.com

网址重定向教程可以在这里找到 - Redirect non-www to www & HTTP to HTTPS using .htaccess file

答案 2 :(得分:5)

尝试这个,我用它,它工作正常

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

答案 3 :(得分:3)

试试这个:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

来源: https://www.ndchost.com/wiki/apache/redirect-http-to-https

(我尝试了很多不同的代码块,这3个衬里完美运行)

答案 4 :(得分:3)

我尝试以上所有代码,但任何代码都不适用于我的网站。然后我尝试这个代码,这个代码运行完美的网站。您可以在htaccess中使用以下规则:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

//Redirect http to https
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

//Redirect non-www to www
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

</IfModule>

使用您的域名更改example.com,并抱歉我的英文不好。

答案 5 :(得分:1)

要以简单的方式将http://example.com http://www.example.com 重定向到 https://www.example.com,您可以在htaccess中使用以下规则:

RewriteEngine on

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

<强> [测试]

自pache 2.4以来,

%{REQUEST_SCHEME} 变量可用,此变量包含请求方案(http或https)的值,​​在apache 2.4上您可以使用以下规则:

RewriteEngine on


RewriteCond %{REQUEST_SCHEME} ^http$
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

答案 6 :(得分:1)

有更好,更安全的方法可以确保您的所有流量都超过https。例如,设置两个虚拟主机并将所有流量从http重定向到您的https主机。请在this answer here on security.stackexchange.com中了解详情。

通过设置虚拟主机进行重定向,您可以发送301状态(永久重定向),以便浏览器了解应将所有以下请求发送到重定向到的https服务器。因此,在第一次重定向响应后,不会再发出任何http请求。

您还应该仔细检查给定的答案,因为如果设置了错误的重写规则,您可能会从传入的请求中删除查询参数。

答案 7 :(得分:1)

如果您想将HTTP重定向到HTTPS并希望为每个网址添加www,请使用下面的htaccess

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

首先将HTTP重定向到HTTPS,然后重定向到www。

答案 8 :(得分:1)

对我来说,只有这个变种:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

谢谢https://www.reg.ru/support/hosting-i-servery/sajty-i-domeny/kak-dobavit-redirekt/redirekt-s-http-na-https(俄文)

答案 9 :(得分:1)

# Switch rewrite engine off in case this was installed under HostPay.
RewriteEngine Off

SetEnv DEFAULT_PHP_VERSION 7

DirectoryIndex index.cgi index.php

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# RewriteCond %{HTTP_HOST} ^compasscommunity.co.uk\.com$ [NC]
# RewriteRule ^(.*)$ https://www.compasscommunity.co.uk/$1 [L,R=301]

答案 10 :(得分:1)

由于这是搜索中最重要的结果之一,因此,如果您尝试在AWS beantalk上将http添加到https重定向,则接受的解决方案将不起作用。 您需要使用以下代码:

RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^.*$ https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

答案 11 :(得分:1)

尝试一下 RewriteCond %{HTTP_HOST} !^www. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

答案 12 :(得分:1)

完美的代码进入HTML索引:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^YourNameWebsite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.YourNameWebsite\.com$
RewriteRule ^/?$ "https\:\/\/YourNameWebsite\.com\/index\.html" [R=301,L]

完美的代码进入PHP索引:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^YourNameWebsite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.YourNameWebsite\.com$
RewriteRule ^/?$ "https\:\/\/YourNameWebsite\.com\/index\.php" [R=301,L]

答案 13 :(得分:0)

除了这些,这些都不对我有用。我的网站托管在https://www.asmallorange.com

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

答案 14 :(得分:0)

以下代码添加到.htaccess文件后,将自动将发往http:的所有流量重定向到https:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

如果您的项目位于Laravel中,请添加两行

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

正好位于RewriteEngine On下方。最终,您的.htaccess文件将如下所示。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Visite here to more information

答案 15 :(得分:0)

在.htaccess文件中添加以下行以限制http访问权限

SSLRequireSSL