2017-11-10 29 views
0

すべてのリクエストを特定のURLにリダイレクトすると同時に着信接続に対してHTTPSを強制しようとしています。httpとhttpsのNginxリダイレクト

望ましい結果:

http://example.com - >https://example.com/dir

https://example.com - >https://example.com/dir

ここ

私は動作するはずと信じていますが、あまりにも多くのリダイレクトがあると言っているものです。

server { 
    listen  80; 
    listen  443 ssl; 
    server_name example.com; 

    location/{ 
    return   301 https://$server_name/dir$request_uri; 
    } 

    location /dir { 
     try_files $uri $uri/ /index.php?$args; 
    } 

ご協力いただきありがとうございます。 443ポートを聴いている

答えて

0

Serverは、(301 https://..を返す。)それ自体にリダイレクトするべきではありません

+0

どのようにして/ dirにリダイレクトするのですか?私はhttpsをドロップするだけですか? –

+0

このようなものは、 'rewrite ^((?! dir /)\ S +)$ dir/$ 1 permanent;'になります。正規表現については確かにテストしていませんが、 – avpav

0

あなたはこれを試すことができ、

server { 
    listen 80; 
    listen 443; 
    server_name example.com; 

    location/{ 
     return 301 https://example.com/dir$request_uri; 
    } 

    location /dir { 
     ... 
     ... 
    } 

} 

基本的な考え方は、内ディレクティブを両方保つ聞くことです同じサーバーブロック。上記のコードは単なる抜粋であり、あなたは、より詳細

EDITためthisリンクのリターンディレクティブセクションを参照してくださいすることができます行方不明pieces.Youに記入する必要があります。場所のブロックでコードを更新しました。

+0

同じ結果が残っています。返されるURLは次のようになります。https://example.com/dir/dir/dir/dir/dir/....など。あなたが '同じブロックへの無限の呼び出し'の意味があるのか​​どうかは確かではありませんが、私の最後からその部分を埋めました。 –

+0

ロケーションブロックでコードを更新しました。今すぐお試しいただけますか?/dir locationディレクティブを処理する必要があります。 –

+0

それはそれです! URLありがとうございました。助けを感謝します! –

関連する問題