Httpリクエストからhttpsに切り替えるためにhtaccessファイルを処理する最良の方法を調査してきましたが、実際のドメインに入力するのではなく、サーバー名リクエストを使用して、サーバーポートからのリクエストのベースから、 Apache構成ファイルとhtaccessを完全に無視します。
もちろん、私の目標はhttpからhttpsを達成するための最もSEOに優しい方法です!
ここに私の現在のhtaccessルールがあります:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_Host} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]
RewriteRule ^$ /index.html [L]
このコードをhttpsに強制する最もエレガントな方法は何ですか? このツール を超えてテストされていませんが、これは私がこれまでに思いついたものです
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
RewriteRule ^$ /index.html [L]
このような単純なケースでは、ルールを書き換える必要はありませんが、確かに同じ目標を達成することはできます。
HTTPホストを説明する特定のVirtualHost
(したがって、アドレスの最後に:80
を持っている)では、次のものが必要です。
RedirectPermanent / https://www.example.com/
https://httpd.Apache.org/docs/2.4/mod/mod_alias.html#redirectpermanent を参照してください。Permanentバージョンが気に入らない場合は、Temporaryバージョンもあります。
ドキュメントによると、RedirectPermanent X Y
はRedirect permanent X Y
と同じであり、permanent
は次のように定義されます。
リソースが永続的に移動したことを示す永続リダイレクトステータス(301)を返します。
また、可能であれば、実際にApache構成を編集して.htaccess
ファイルを削除することは、多くの理由(パフォーマンス、セキュリティ、シンプルさ)のために良い方向です
実際のドメインに入力するのではなく、サーバー名の要求を使用して、サーバーポートから要求を送信することから、Apache構成ファイルを編集してhtaccessを完全に無視するまで、すべてを見てきました。
「Apacheの設定ファイルは非常に柔軟で複雑な獣であるため」「猫の皮を剥ぐ多くの方法」があることとは別に、「最良」の方法は他の多くの要因に依存することができます。
UseCanonicalName On
は設定されていますか?)<VirtualHost>
コンテナにアクセスできますか?または、.htaccess
(共有サーバー環境など)に制限されていますか。HTTPS
およびSERVER_PORT
サーバー変数はおそらく役に立たないでしょう。 (一部のホストは代替environment変数を設定します-しかしこれはserver specific。)このコードをhttpsに強制する最もエレガントな方法は何ですか?
さて、「優雅さ」は主観的なものです。
サーバー設定にアクセスできる場合、.htaccess
で実際にこれを行うべきではありません。代わりに、@ PatrickMevzekが示唆するように、関連する<VirtualHost>
コンテナで簡単なmod_alias Redirect
を使用する必要があります。これは、「簡単」、「安全」、およびより効率的です。
後で HSTS を実装する場合(特に HSTSプリロードリスト を取得する場合)、これはメインサーバー設定で実装するのが本当に簡単になります。 .htaccess
でこれを実装するには、追加の複雑さが必要です。
RewriteCond %{HTTPS} off RewriteRule (.*) https://www.example.com/$1 [R=301,L]
それ以外の場合、.htaccess
へのアクセス権しか持っていない場合、提案しているディレクティブに「間違った」ものはまったくありません。ただし、これは必ずしもeveryサーバーでは機能しない、またはeveryシナリオ。サブディレクトリに.htaccess
ファイルが追加されている場合、(偶然)オーバーライドされる可能性があります。
RewriteRule ^$ /index.html [L]
脇:DirectoryIndex
が正しく設定されていれば、このルールは不要です。 (多分「特別な」何かが起こっていない限り?)
別のオプション;
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
あなたはとても近いです。これは、私が管理しているドメインの1つで使用するもので、問題なく機能します。
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.example.com/$1 [L]