NFgix設定URL再書き込み

6723 ワード

URLリピートとは、ウェブサイトのURLにある状態を達成するためにconfファイルを構成することによって、よくある擬似静的、301リダイレクト、ブラウザ指向などのルールに方向付け/ジャンプすることをいう。Ngixは、正則表現を用いてURIを書き換えることができ、関連変数に応じて異なる構成をリダイレクトして選択することができます。このコマンドがServerセグメントで指定されている場合、要求されたlocationが決定される前に実行され、命令実行後に選択されたlocationに他の書き換えルールがある場合、それらも実行される。このコマンドをlocationで実行すると、新しいURIが生成され、またlocationで新しいURIが決定される。このようなループは最大10回まで実行でき、それを超えると500エラーに戻ります。
rewrite
server {
    rewrite             ;
}
  • 規則:マッチングしたいターゲットurl
  • を文字列または正規表現することができる。
  • 方向性経路:規則に適合した後に方向付けされるべき経路を示し、規則に正則がある場合は、肯定則内の獲得パケット
  • を示すためにドルindexを使用することができる。
  • 書き換えタイプ:
  • last:Apphe里徳(L)マークに相当し、rewriteが完了したことを示し、ブラウザアドレスバーURLアドレスが変更されない。
  • break:このルールのマッチングが完了したら、マッチングが終了し、後のルールに一致しなくなります。ブラウザアドレスバーのURLはそのままです。
  • redirect:302に戻ると、一時的にリダイレクトされ、ブラウザのアドレスにジャンプ後のURLアドレスが表示されます。
  • return
    return code
    return命令は、構成文の実行を終了し、クライアントの状態コードに戻るために、以下の値を使用することができます。204、400、402-406、408、410、411、413、416、500-514。デフォルトはNoneに戻ります。さらに、非標準コード444は、接続をオフにし、任意のヘッダを送信しないであろう。301と302は単に状態コードだけを返すことができないので、リダイレクトURLが必要です。returnコマンドは301,302に戻ることができません。
    例1
    
        server {
            listen 8899;
            server_name localhost;
            root /Users/bowen/python/pages;
    
            #   test1.html ,      last.html ,       
            rewrite /test1.html /last.html last;
    
            #   test2.html ,      break.html ,       
            rewrite /test2.html /break.html break;
    
            #   test3.html ,  302     ,             
            rewrite /test3.html /redirect.html redirect;
    
            #   test4.html ,  301     ,             
            rewrite /test4.html /permanent.html permanent;
    
            location / {
                # last     ,  400   
                rewrite /last/ /400.html last;
    
                # break     ,       
                rewrite /break/ /400.html break;
    
            }
    
            location = /400.html {
                return 400;
            }
        }
    lastとbreakの違い
  • lastは普通serverとifに書いていますが、breakは普通locationで
  • を使います。
  • lastは書き換え後のurlマッチングを終了しません。つまり、新しいurlはserverからマッチングフローをもう一度歩きます。breakは書き直した後のマッチング
  • と一致します。
  • breakとlastは、後続のrewrite命令
  • を実行し続けることができます。
  • locationでbreakに戻ると、その後のマッチングlocation
  • が直接に有効になり、停止される。
  • リダイレクトが相対的(ホスト名の部分がない)である場合、nginxはリダイレクト中にマッチングserver_を使用する。nameコマンド
  • if判断
    if (   ) {
    }
  • 式が変数である場合、値が空である場合や0で始まる文字列はfalse
  • として扱われます。
  • 変数と内容を直接比較する場合、===~正規表現にマッチします。~*大文字と小文字のマッチングは区別されません。大文字と小文字の区別が内蔵の条件に合わないと判断しました。
  • -fと!-fは、ファイルがあるかどうかを判断するために使用される
  • -dと!-dディレクトリがあるかどうかを判断するために使用される
  • -eと!-eファイルまたはディレクトリが存在するかどうかを判断するために使用される
  • -xと!-xファイルが実行可能かどうかを判断するために使用される

  • セット
    set      
    setで新しい変数を定義しますが、set設定は使えません。xxxヘッダ変数の値。
    内蔵グローバル変数
    $args :             , $query_string
    $content_length :      Content-length$content_type :      Content-Type$document_root :      root       。
    $host :        ,        。
    $http_user_agent :    agent  
    $http_cookie :    cookie  
    $limit_rate :             。
    $request_method :         ,   GET POST。
    $remote_addr :     IP  。
    $remote_port :       。
    $remote_user :     Auth Basic Module      。
    $request_filename :          , root alias   URI    。
    $scheme : HTTP  ( http,https)。
    $server_protocol :        ,   HTTP/1.0 HTTP/1.1$server_addr :      ,                 。
    $server_name :      。
    $server_port :            。
    $request_uri :          URI,      , :”/foo/bar.php?arg=baz”。
    $uri :          URI,$uri      , ”/foo/bar.html”。
    $document_uri$uri
    例2
        location = /test_if.html {
            #     test
            set $name test;
    
            #         URL
            #        name=xx,     
            if ($args ~* name=(\w+?)(&|$)) {
                set $name $1;
            }
    
            # 301
            rewrite ^ /$name.html permanent;
        }
    上に配置されたアクセス状況:-/test_ifh.=>/test.-/test_ifh.name=ok=>/ok.html?name=ok