web-dev-qa-db-ja.com

.htaccessリダイレクトhttpからhttps

古いURL(www1.test.net)があり、https://www1.test.netにリダイレクトしたい
サイトにSSL証明書を実装してインストールしました。
これは私の古いファイル.htaccessです:

RewriteEngine On
RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

URLがhttpsに自動リダイレクトされるように.htaccessファイルを構成するにはどうすればよいですか?
ありがとう!

67

2016年に更新

この回答が注目を集めているため、仮想ホストを使用してこれを行う際のより推奨される方法を示唆したいと思います。 Apache:Redirect SSL

<VirtualHost *:80>
   ServerName mysite.example.com
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
   DocumentRoot /usr/local/Apache2/htdocs
   SSLEngine On
# etc...
</VirtualHost>

古い答え、ハックなことssl-portが80に設定されていない場合、これは機能します:

RewriteEngine on

# force ssl
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

これが最初の書き換えルールであることに注意してください。

Edit:このコードは次のことを行います。 RewriteCond(ition)は、リクエストのServerPortが80であるかどうかをチェックします(これはデフォルトのhttpポートです。別のポートを指定した場合は、条件を調整する必要があります)。その場合、URL全体を一致させます(.*)そしてhttps-urlにリダイレクトします。 %{SERVER_NAME}は特定のURLに置き換えることができますが、この方法で他のプロジェクトのコードを変更する必要はありません。 %{REQUEST_URI}は、TLD(トップレベルドメイン)の後のURLの部分です。そのため、httpsとして、元の場所にリダイレクトされます。

98
Jojo

次を使用して、ドメインのすべてのページをhttpからhttpsに正常にリダイレクトします。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

これは、301 'permanently moved'リダイレクトを使用してリダイレクトすることに注意してください。これは、SEOランキングの転送に役立ちます。

302 'temporarily moved' change [R=302,L]を使用してリダイレクトするには

125
Bradley Flood

これは、wwwおよびhttps、プロキシユーザーではなくプロキシユーザーに最適です。

RewriteEngine On

### WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

### WWW & HTTPS
42
llioor

次のコードでhttpsを強制します。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
7
Arda

HTTPS/SSL接続がロードバランサーで終了し、すべてのトラフィックがポート80のインスタンスに送信される場合、次のルールが安全でないトラフィックをリダイレクトします。

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

mod_rewriteモジュールがロードされていることを確認してください。

4
Eneko Alonso

リダイレクトするための最良の方法を探して、私はこれを見つけました(html5boilerplateから来ています):

# ----------------------------------------------------------------------
# | HTTP Strict Transport Security (HSTS)                              |
# ----------------------------------------------------------------------

# Force client-side SSL redirection.
#
# If a user types `example.com` in their browser, even if the server
# redirects them to the secure version of the website, that still leaves
# a window of opportunity (the initial HTTP connection) for an attacker
# to downgrade or redirect the request.
#
# The following header ensures that browser will ONLY connect to your
# server via HTTPS, regardless of what the users type in the browser's
# address bar.
#
# (!) Remove the `includeSubDomains` optional directive if the website's
# subdomains are not using HTTPS.
#
# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
# https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1
# http://blogs.msdn.com/b/ieinternals/archive/2014/08/18/hsts-strict-transport-security-attacks-mitigations-deployment-https.aspx

Header set Strict-Transport-Security "max-age=16070400; includeSubDomains"

たぶん、それは2017年に誰かを助けるでしょう! :)

4
LIIT

このコードを.htaccessファイルに挿入します。そして、それは動作するはずです

RewriteCond %{HTTP_Host} yourDomainName\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourDomainName.com/$1 [R,L]
3
Pallavi

このコードを.htaccessファイルの最後に追加します

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
1
Muthu Kumaran

.htaccessの先頭に次を追加します

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

リダイレクトにも問題がありました。 Stackoverflowで提案されたすべてを試しました。私が自分で見つけた1つのケースは次のとおりです。

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
1
Denys Zaiats