古い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
ファイルを構成するにはどうすればよいですか?
ありがとう!
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として、元の場所にリダイレクトされます。
次を使用して、ドメインのすべてのページを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]
を使用してリダイレクトするには
これは、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
次のコードでhttpsを強制します。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
HTTPS/SSL接続がロードバランサーで終了し、すべてのトラフィックがポート80のインスタンスに送信される場合、次のルールが安全でないトラフィックをリダイレクトします。
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
mod_rewrite
モジュールがロードされていることを確認してください。
リダイレクトするための最良の方法を探して、私はこれを見つけました(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年に誰かを助けるでしょう! :)
このコードを.htaccessファイルに挿入します。そして、それは動作するはずです
RewriteCond %{HTTP_Host} yourDomainName\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourDomainName.com/$1 [R,L]
このコードを.htaccessファイルの最後に追加します
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
.htaccessの先頭に次を追加します
RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
リダイレクトにも問題がありました。 Stackoverflowで提案されたすべてを試しました。私が自分で見つけた1つのケースは次のとおりです。
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]