2013-07-25 16 views
5

mod_rewriteを使用して、Ubuntu Server 12.04でApache 2.2.22を使用してHTTPリクエストをHTTPSにリダイレクトする際に問題が発生しました。次のようにApacheを使用したHTTPからHTTPSへのリダイレクト

私は/ etc/apache2の/サイト利用可能/デフォルトのファイルは、次のとおりです。

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

HTTPSのホストが同じディレクトリにデフォルト-SSLで定義されています。

サーバーのローカルIPアドレスにアクセスすると、リダイレクトが正しく動作するように見えます。ただし、FQDN経由でアクセスすると、FQDNにはアクセスできません。 FQDNを使用すると、サイトはファイアウォールでサーバーの443にマップされているポート5443から使用できます。そのため、おそらく問題に関連するものがあります。別のサーバーがこのIPアドレスで使用しているので、ポート443を直接使用することはできません。さらに、次のことを明確にする

は、有効なリンクです:

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

リダイレクトがここに動作します:

http://192.168.200.80 

しかし、以下は400不正な要求を与え、そしてリダイレクトが必要とされている場所です:

http://website:5443/ 

"あなたのブラウザは、このサーバが理解できなかった要求を送信しました。 理由:SSL対応のサーバーポートに対してプレーンなHTTPを使用しています。 代わりにこのURLにアクセスするにはHTTPSスキームを使用してください。 "

+0

これは多分あなたががそれの理由を持って、簡単なことを行うには長い道のりのように思えます。いずれの場合でも、mod_proxy:http://httpd.apache.org/docs/2.0/mod/mod_proxy.htmlとこの相対的な質問と一緒にチェックしてください。http://stackoverflow.com/questions/1162375/apache-port -proxy。 –

答えて

2

ここで問題となるのは初期HTTPリクエストです。これはサーバーがポート443でリクエストを受信したことを理解できないコード)を示唆している。ポートへ

ポートが指定されていない場合は、プロトコル、ポート80、httpshttpデフォルトは443

ページにアクセスする場合、これは。私は賭け、また、お近くのリダイレクトが機能する理由ですhttp://website/(ポート80の適切なポート転送を使用)を通じて、それはうまくいくでしょう。また、あなたのVirtualHostはとにかくポート80であるため、website:5443(またはwebsite:443)に送信された要求に対しては有効ではありません。

一般に、HTTPとHTTPS要求を1つのポートで受け入れるサーバーが必要です。どのような一般的なサーバーが実際にそのようなものをサポートしているかわからないのは、それが本質的に仕様に違反しているからです。

+0

基本的に、これは私のセットアップではできませんか? – dutchgold92

+0

私は気づいていません。おそらく、両方とも受け入れるカスタムサーバーや、実際のコンテンツに基づいてリクエストをリダイレクトするカスタムプロキシが必要になるでしょう。 – Mario

+0

どちらの場合でも、この状況ではそれほど価値がありません。乾杯。 – dutchgold92

8

これは完全に可能です。次の例では、すべてのhttpがhttpsのURLにリダイレクトされます。

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

書き換えモジュールmod_rewriteを読み込んで有効にしてください。

1

あなたのサイトをhttp:// anything.example.comからhttps://anything.example.comにリダイレクトしたい場合は、専用のホスティング用.confファイルを/ etc/httpd/confとして作成してください。 d/dedicated.confとその他のconfファイルはvirtual.conf ...のようにdedicated.confに入ります。

これはHTTPSにリダイレクトするためのconfファイルです。 th[][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> 
+1

画像としてコードを投稿しないでください。 – Jakuje

+0

これはセキュリティ上の脆弱性を導入しますか? – Anthony

+0

私は、Apache自体がリダイレクトを使用することを推奨していますが、現在は書き換えはしていませんか? – Anthony

0
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
関連する問題