私は考えるこれを並べ替えました(主に質問に感謝します 。htaccessを使用してハードコーディングせずにwww以外をwwwにリダイレクトする方法は? )、しかし私はまだ完全ではありませんいくつかのことを理解します。
サーバーへのすべての非SSL接続を強制的にSSLにルーティングしたいと思います。私は仮想ホストを1つしか持っていません(そしてそれはサーバーの存続期間中は確実に当てはまります)が、ステージングと本番用のhttpd.conf
ファイルが同一のままになるように、ドメイン名をハードコーディングすることは避けたいと思います。
次のようなmod_rewrite
ルールを使用してSSLを使用するようにリクエストを強制できることを知っています。
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
または
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
ただし、比較的簡単な質問が2つあります。
RewriteCond
ステートメントの1つを他のステートメントよりも優先する必要がありますか?おそらく、%{SERVER_PORT}
変数を使用すると、たとえば、ポート8000の接続は、引き続き平文で提供されますか?見落としている%{HTTPS}
変数の使用を避けるべき理由はありますか?RewriteRule
ステートメントの%{HTTP_Host}
変数は尊重され、リクエストからのHost:
ヘッダーが何であれ、自動的に置き換えられますか?これが機能しない状況はありますか?違いが生じる場合は、RedHatでmod_ssl
を使用してApache2を実行し、サイトはDrupal 7を使用します。
比較的ばかげた質問でごめんなさい。 Apache sysadminは私の仕事の中核ではないので、できる限り混乱させようとしています。皆さんありがとう!
私はいつも次のようなものを使用しました:
_RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
_
たまに80以外のポートでHTTPを提供するのが好きだからです。まあ、それは好きではありませんが、必要な場合もあります。たとえば、SSLが使用されている場合、_%{HTTPS}
_はtrueになります。ポート80。
普段使っていると思います
_RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
_
_%{HTTP_Host}
_は常に、クライアントによって_Host:
_ヘッダーとして設定されたものになります。
しかし、これを行う別の方法があることに気づきました。
_<VirtualHost *:80>
ServerName mysite.example.com
Redirect permanent / https://mysite.example.com/
</VirtualHost>
_
上記のブロックにDocumentRootがないことに気付くでしょう。リダイレクトする場合すべて、必要ありません。
サイトの一部をSSLにリダイレクトしたいだけの場合は、
_Redirect permanent /secure https://mysite.example.com/secure
_
リダイレクトオプションは、狂気のレベルが1つ少ないため(mod_rewriteによって非常に親切に提供されているため)、フルサイトのHTTPS強制にはより適していると思います。
ロード/実行するモジュールが1つ少なくなるため、さらに高速になる可能性があります。