7

mod_rewrite を使用して、Ubuntu Server 12.04 で Apache 2.2.22 を使用して HTTP 要求を HTTPS に強制的にリダイレクトするという問題があります。

私の /etc/apache2/sites-available/default ファイルは次のとおりです。

    <VirtualHost *:80>
        RewriteEngine On
        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
    </VirtualHost>

HTTPS ホストは、同じディレクトリの default-ssl で定義されています。

サーバーのローカル IP アドレスにアクセスすると、リダイレクトは正常に機能しているように見えます。ただし、FQDN 経由でアクセスすると、そうではありません。FQDN を使用すると、サイトはポート 5443 で利用できます。これは、ファイアウォールでサーバーの 443 にマップされているため、問題と関係がある可能性があります。ポート 443 は別のサーバーによってこの IP アドレスで使用されているため、直接使用することはできません。

さらに明確にするために、以下は有効なリンクです。

    https://website:5443
    https://192.168.200.80:443

リダイレクトは次の場所で機能します。

    http://192.168.200.80

ただし、次の例では 400 Bad Request が返されます。ここでリダイレクトが必要になります。

    http://website:5443/

「お使いのブラウザは、このサーバーが理解できないリクエストを送信しました。理由: SSL が有効なサーバー ポートに対してプレーン HTTP を使用しています。代わりに、HTTPS スキームを使用してこの URL にアクセスしてください。」

4

4 に答える 4

9

これは完全に可能です。以下は、すべての http を https url にリダイレクトします。

<VirtualHost *:80>
    ServerName   mydomainname.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

必ず書き換えモジュール mod_rewrite をロードして有効にしてください。

于 2014-08-08T19:38:52.357 に答える
3

ここでの問題は、最初の HTTP 要求です。これは、サーバーがポート 443 で要求を受信して​​いることを認識できないため、機能しません (応答コードが示すように)。

ポートが指定されていない場合、プロトコルはhttpデフォルトでポート 80httpsからポート 443 に設定されます。

これが、ローカル リダイレクトが機能する理由でもあります。http://website/(ポート 80 の適切なポート フォワーディングを使用して)ページにアクセスすると、同様に機能するに違いありません。また、 yourはポート 80 に対してのみ定義されているため、 (または)VirtualHostに送信されたリクエストに対しては有効ではないことに注意してください。website:5443website:443

一般に、1 つのポートで HTTP と HTTPS の両方のリクエストを受け入れるサーバーが必要です。(私が思うに)本質的に仕様に違反しているため、人気のあるサーバーが実際にそのようなものをサポートしているかどうかはわかりません.

于 2013-07-25T09:23:10.327 に答える
0

http://anything.example.com から https: //anything.example.com にサイトをリダイレクトしたい場合 ... 専用のホスティング .conf ファイルを /etc/httpd/conf.d/dedicated として作成するだけです。 conf およびその他の conf ファイルを virtual.conf として... dedicated.conf のエントリは次のとおりです....

これは、https にリダイレクトするための conf ファイルをホストする専用サーバーです... 目[][1]

<virtualhost *:80>
servername host.example.com
documentroot /var/www/html
rewriteengine on
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
sslcertificatefile /etc/pki/tls/certs/name.crt
sslcertificatekeyfile /etc/pki/tls/private/name.key
</virtualhost>
<directory /var/www/html>
allowoverride all
require all granted
</directory>

または、以下のコメントで述べたように、リダイレクトも使用できます。

<virtualhost *:80>
servername host.example.com
documentroot /var/www/html
RedirectMatch / https://host.example.com:ANY_PORT/ #if there is specific port
sslcertificatefile /etc/pki/tls/certs/name.crt
sslcertificatekeyfile /etc/pki/tls/private/name.key
</virtualhost>
<directory /var/www/html>
allowoverride all
require all granted
</directory>
于 2016-10-23T17:48:02.377 に答える
-1
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
于 2017-06-01T07:27:13.103 に答える