.htaccessはhttpをhttpsにリダイレクトします


83

古い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]

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


:二行目がに意図されている場合は実際のファイルへのパスポイントは(あなたとは予想可能な拡張子をリストアップしている)、既存のファイルのチェックでそれを置き換えることによって、それをより柔軟にすることができれば、リダイレクトをしないでRewriteCond %{REQUEST_FILENAME} !-f 続きますあなたのリダイレクト。
diamondsea

回答:


113

2016年の更新

この回答が注目を集めているので、仮想ホストを使用してこれを行うためのより推奨される方法を示唆したいと思います。Apache:リダイレクト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]

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

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


1
ありがとうありがとう...それは機能します...:Dしかし、なぜそれが機能するのか説明できますか?...ありがとう... ^^
–BànChânTrần 2012

1
それがあなたのために働いてうれしいです。コードの説明については、更新された回答を確認してください。これで十分ですか?
Jojo

1
「これが最初の書き換えルールであることに注意してください。」@Jojoは私の命を救った男:*
Ivan Shulev 2016年

1
説明に追加します。「[[L]フラグ](httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l)により、mod_rewriteはルールセットの処理を停止します。」通常、これをデフォルトで追加するだけです。「[[R]フラグ](httpd.apache.org/docs/2.4/rewrite/flags.html#flag_r)を使用すると、ブラウザにHTTPリダイレクトが発行されます。」存在しない場合、リダイレクトは内部になり、HTTPSを使用する意味が無効になります。デフォルトでは、発行されたリダイレクトのステータスは302(一時的なリダイレクト)です。ブラウザに新しいURLを(「永続的に」)キャッシュさせたい場合は、[R=301]代わりにを使用してください。
ジャニスElmeris

1
VirtualHostソリューションの場合、セットアップが複雑な場合に「永続的なリダイレクト」ステートメントをどこに配置する必要があるかが明確ではありません。頂上近くを想定して、うまくいきました。
eyal_katz 2018年

170

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

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

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

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


5
これは「ハッキー」に受け入れられた答えよりも適切です
am05mhz 2016年

7
X-Forwarded-Protoが必要な場合もあります RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Kuzeko 2016年

1
ここではるかに良い答え
2017年

これは、Godaddyサーバーで機能します。@ブラッドリーグレート!!
ヴィシュヌ2018

これは、さまざまなサーバー環境とサイト設定の下で毎回機能しました。私見の推奨される答えである必要があります。
ジョンコンタリーノ

57

これは、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

1
www以外にリダイレクトする方法は?
エリョール2017年

これは、これまでであるもののために最良の答えで%{HTTPS} offは十分ではありません
NoodleOfDeath

10

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

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

1
@Nibyは私の答えの日付と「すでにそこにあるもの」をチェックしてください。
アルダ

6

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

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

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


4

リダイレクトするための最良の方法を探して、私はこれを見つけました(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年に誰かを助けるでしょう!:)


2017年には、これが受け入れられる答えになるはずです。ただし、.htaccesファイルを介してHSTSを有効にするには(質問はこれでタグ付けされています)、IfModuleタグを省略する必要があることを含める必要があります。あなたがそれであなたの答えを編集するならば、私は受け入れられた答えからここに喜んでリンクします
Jojo

こんにちはジョジョ!この遅い答えで申し訳ありません、あなたは両方# <IfModule mod_headers.c># </IfModule>行を削除することを意味しますか?
LIIT 2017

ちょっとLIIT、はい、それは私が意味したことです。
Jojo 2017年

1
これは素晴らしいことであり、(おそらく)望ましい効果を達成またはサポートするのに役立ちますが、これhttpリクエストをhttpsにリダイレクトしないため、質問に答えません。クライアントがすでにHTTPS経由でサイトにアクセスしている場合にのみ機能します(指定された最大経過時間内)。したがって、常に適切なリダイレクトを伴う必要があります。
Nicolai Ehemann 2018年

4

このコードを.htaccessファイルに挿入します。そしてそれはうまくいくはずです

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

2

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

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

1
おそらく、他の回答のように、この回答ではmod_rewriteが有効になっていないためです。
keji 2015

RewriteEngine onこの上に追加するだけで機能します。
Giacomo1968 2015

2

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

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

1

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

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

1

これにより、不透明なプロキシのすべての組み合わせでリダイレクトが機能するようになります。

これには、ケースクライアント<http>プロキシ<https>ウェブサーバーが含まれます。

# behind proxy
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^http$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

# plain
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^$
RewriteCond %{REQUEST_SCHEME} ^http$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

-1

.htaccessファイルでHTTPSを強制する

==>すべてのWebトラフィックをリダイレクトする:-

すべてのWebトラフィックでHTTPSを使用するように強制するに.htaccessは、Webサイトのルートフォルダーのファイルに次のコード行を挿入します。

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

==>指定されたドメインのみをリダイレクトする:-

特定のドメインでHTTPSを使用するように強制するに.htaccessは、Webサイトのルートフォルダーにあるファイルで次のコード行を使用します。

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

これが機能しない場合は、最初の2行を削除してみてください。

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

example.comを、httpsに強制しようとしているドメイン名に置き換えてください。さらに、www.example.comを実際のドメイン名に置き換える必要があります。

==>指定されたフォルダをリダイレクトする:-

特定のフォルダーにSSLを強制する場合は.htaccess、その特定のフォルダーに配置されたファイルに以下のコードを挿入します。

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://www.example.com/folder/$1 [R=301,L]

フォルダ参照を実際のフォルダ名に変更してください。次に、www.example.com / folderを、SSLを強制する実際のドメイン名とフォルダーに置き換えてください。


-1

ドメインをdomainname.comに置き換えてください、それは私と一緒に働いています。

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

2
回答としてコードを投稿するだけでなく、コードの機能と質問の問題をどのように解決するかについても説明してください。説明付きの回答は通常、より有用で質が高く、賛成票を集める可能性が高くなります。
Mark Rotteveel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.