3つの仮想ホストをホストするDebianで実行されているApache2 Webサーバー(v。2.2.16)があります。最初の2つのホストはHTTPのみです(server1とserver2)。最後のホストはHTTPSのみです(server3)。私の仮想ホスト設定ファイルは Pastebin にあります。 mod rewriteを使用して、次の動作を取得したいと思います。
http://server3
のリクエストはすべてhttps://server3
にリダイレクトされますhttps://server1
またはhttps://server2
のいずれかの要求は、必要に応じてhttp://server1
またはhttp://server2
にリダイレクトされます。現在、http://server3
をリクエストすると、そのホストのインデックス作成が無効になり、https://server1
またはhttps://server2
のリクエストがhttps://server3
(その唯一の仮想ホストとしてSSL)。この動作は望ましくありません。
これまでのところ、中央構成ファイルに書き換えルール(myServerWideConfs.conf)を追加しましたが、残念ながら効果はありません。私は、このルール(または同様のもの)がserver1とserver2のすべてのhttps://リクエストを適切なhttp://リクエストに書き換えるべきだという印象を受けました。
RewriteEngine On
RewriteCond %{HTTP_Host} !^server3 [NC]
RewriteRule (.*) http://%{HTTP_Host}
私の質問は2つあります。
対処方法:各サイトでvhostsを使用します。これには、抑制したいバリアントのvhostも含まれます。これにより、名前付きサイトのすべての構成が1か所に保持されます。 mod_macro
のおかげで、コンテンツの複製は最小限です。
正しいプロトコルを使用して再試行するためにclientを取得することを考えているため、内部的に書き換えるのではなく、リダイレクトを発行する必要があります。 POSTの後のリダイレクトはデータが受け入れられ、Webブラウザで間違ったスキームを使用している人々にのみ本当に対処したいことを意味するため、GETのみを書き換えるようにしてください。APIユーザーは正しいものを使用する必要がありますインタフェース。
そう:
<IfModule mod_rewrite.c>
<VirtualHost 192.0.2.1:80 [2001:db8::1234:1]:80>
ServerName www.example.org
DocumentRoot /www/sites/empty-stub
RewriteEngine on
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*) https://www.example.org$1 [R,L]
</VirtualHost>
</IfModule>
これを何度も行う場合は、mod_macro <Macro>..</Macro>
ブロックでラップして、次のようにします。
Use RedirToHTTPS www.example.org
これには注意が必要です。これまでは、指定されたIPアドレスへの接続をセットアップするときにSSLがアクセスしようとした仮想ホストを示すことを許可していなかったため、これは不可能でした。これは、TLSの機能である Server Name Indication ( RFC 4366 )で多少変更されました。
Apacheは、そのサポートを得るのに長い時間を要しました しかし、現在はそうしています 。お使いのバージョンは十分に新しいので、それをサポートする必要がありますが、それもサポートするブラウザーが必要です。書き換えに取り組む前に、https://server1.example.com/
が正しいVHostを返すことを確認する作業に取り掛かります。それができれば、Mod-rewriteのようなものはただ動作するはずです。