33

htaccess でポート 80 を 2368 にリダイレクトする必要がありますが、SSL が壊れないように、要求されたプロトコルをそのまま維持したいと考えています。

私は現在これを持っています:

RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
RewriteRule ^ http://sub.domain.com:2368%{REQUEST_URI} [P,QSA,L]

これは正しく機能しますが、可能であればプロトコルを %{HTTP_HOST} 条件から取得したいと考えています。

ドメインとプロトコルをハードコーディングせずに、これをより動的にする方法はありますか?

そのままでは非常に遅いようです。

4

5 に答える 5

51

Apache 2.4 以降では、変数を使用し%{REQUEST_SCHEME}てスキームを保持することもできます。

RewriteRule "^" "%{REQUEST_SCHEME}://sub.domain.com:2368%{REQUEST_URI}" [P,QSA,L]

このように条件に干渉する必要はありません。

于 2016-11-22T10:03:18.223 に答える
26

次のような条件を追加してみてください。

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS}:s on:(s) 

HTTPSがオフかオンかをチェックし、後方参照を使用して「s」文字を取得できます。

RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS}:s on:(s) 
RewriteRule ^ http%1://sub.domain.com:2368%{REQUEST_URI} [P,QSA,L]

したがって、HTTPS がオフの場合、%1は空白で、プロトコルはhttp://です。HTTPS がオンの場合、「s」はグループ化され、%1後方参照は「s」であるため、プロトコルはhttps://.

ただし、これはすべて、ポート 2368 が非暗号化と SSL/TLSの両方を処理できることを前提としています。

于 2013-10-15T03:07:01.897 に答える