リライトの使用法と設定、および nginx の場合

リライトの使用法と設定、および nginx の場合

1. アプリケーションを書き換える

構文を書き換える

rewrite  <正则表达式>  <跳转后的内容>  [rewrite支持的flag标记]

1.ジャンプシーンを書き換える

  • URL はより標準化され、合理的に見えます
  • 企業は動的 URL アドレスを静的アドレスとして偽装してサービスを提供します
  • URL が新しいドメイン名に変更された後、古い訪問は新しいドメイン名にジャンプします
  • サーバー側でのいくつかのビジネス調整

2. 実際のシーンを書き直す

  • 1.3.1 Nginx ジャンプ要件の実装
    リライトを使用して一致およびジャンプする
    if を使用してグローバル変数と一致してからジャンプ
    する 位置を使用して一致してからジャンプする
  • 1.3.2 リライトは、server{}、if{}、location{} セクションに配置されます。location
    は、渡されたパラメータを除き、ドメイン名の後の文字列に対してのみ機能します。

  • 1.3.3グローバル変数がドメイン名またはパラメータ文字列に一致する場合に使用します
    。 proxy_pass リバース プロキシを使用します。

3. 一般的に使用される nginx 正規表現

^:匹配输入字符串的起始位置
$:匹配输入字符串的结束位置
*****:匹配前面的字符零次或多次
+:匹配前面的字符一次或多次
?:匹配前面的字符零次或一次
.:匹配除\n之外的任何单个字符 使用[.\n]可以匹配包括\n在内的任意字符
****:转义符
\d:匹配纯数字
{n}:重复n次
{n,}:重复n次或更多次
[c]:匹配单个字符c
[a-z]:匹配a-z小写字母的任意一个
[a-zA-Z]:匹配a-z小写字母或A-Z大写字母的任意一个

4. 共通フラグ

国旗 効果
最後 基本的に、このフラグは、現在の一致が終了し、最大 10 ~ 20 の一致で次の一致が継続されることを示すために使用されます。書き換えルールが書き換えられると、他の書き換えルールによって処理されなくなります。代わりに、UserAgent は書き換えられた URL に対するリクエストを再度開始し、同様のプロセスを最初から実行します。
壊す 書き換えを中止します。一致を継続しません。この書き換えルールが書き換えられると、UserAgent は新しい URL のリクエストを再開始し、現在の場所にある書き換えルールによってチェックされなくなります。
リダイレクト 一時的にリダイレクトされた HTTP ステータス 302 を含む新しい URL を返します。
永続 永続的なリダイレクトのために、HTTP ステータス 301 の新しい URL を返します。

last と Break がリダイレクトされた後、アドレス バーは変更されません。これは類似点です。違いは、last がサーバーと if に書き込まれ、break が location に書き込まれることです。Last は書き換えられた URL の一致を終了せず、break は書き換えられた URL の一致を終了します。

5. ケース構成

書き換え書き換えフラグ

rewrite は主に URL を書き換えたり、URL 命令をジャンプしたりするために使用されます。

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf		
		root /hhh/xxx;
    	location / {
    
    
                rewrite /1.html /2.html;
                rewrite /2.html /3.html;
        }

        location /2.html {
    
    
                rewrite /2.html /a.html;
        }

        location /3.html {
    
    
                rewrite /3.html /b.html;
        }
        
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@nginx ~]# systemctl restart nginx

[root@nginx ~]# mkdir -p /hhh/xxx
[root@nginx ~]# echo "web1" > /hhh/xxx/1.html
[root@nginx ~]# echo "web2" > /hhh/xxx/2.html 
[root@nginx ~]# echo "web3" > /hhh/xxx/3.html
[root@nginx ~]# echo "web a" > /hhh/xxx/a.html
[root@nginx ~]# echo "web b" > /hhh/xxx/b.html
[root@nginx ~]# curl 192.168.183.138/1.html
web b

リクエストされると1.html、最終的にはweb b

内部的にlocation{}は、ブレークが発生すると、この命令location{}と後続の命令はすべて実行されなくなるため、 web2 にアクセスします。location{}2.html

		location / {
    
                                    
                rewrite /1.html /2.html break;
                rewrite /2.html /3.html;            
        }                                                                                     
        location /2.html {
    
                              
                rewrite /2.html /a.html;            
        }                                      
                                                
        location /3.html {
    
                              
                rewrite /3.html /b.html;            
        }   
        
[root@nginx ~]# curl 192.168.183.138/1.html
web2

location{} 内で最後に遭遇すると、この location{} 内の後続の命令は実行されず、書き換えられた URL によって、その URL が配置されているサーバー{…} タグへのリクエストが再開始され、最初から最後までルールに一致し、一致するものが実行されます。

		location / {
    
    
                rewrite /1.html /2.html last;
                rewrite /2.html /3.html;
        }

        location /2.html {
    
    
                rewrite /2.html /a.html;
        }

        location /3.html {
    
    
                rewrite /3.html /b.html;
        }
        
[root@nginx ~]# curl 192.168.183.138/1.html     web a

2、申請の場合

1. if文の判定条件

正規表現一致

  • ==: 同等の比較;
  • ~: 指定された正規表現パターンに一致する場合は「true」を返し、大文字・小文字を区別して一致・不一致を判定します。
  • ~*: 指定した正規表現パターンに一致する場合は「true」を返し、一致判定時に大文字・小文字を区別しません。
  • !~: 指定した正規表現パターンに一致しない場合は true を返し、大文字と小文字を区別して一致判定します。
  • !~*: 指定した正規表現パターンに一致しない場合は「true」を返し、一致判定時に大文字・小文字を区別しません。

2. ファイルとディレクトリの一致判定

  • -f、!-f: 指定されたパスが存在し、ファイルであるかどうかを判断します。
  • -d、!-d: 指定されたパスが存在し、ディレクトリであるかどうかを判断します。
  • -e、!-e: 指定されたパス (ファイルまたはディレクトリ) が存在するかどうかを確認します。
  • -x、!-x: 指定されたパスにファイルが存在し、実行可能であるかどうかを判断します。

3. ブラウザベースの分離ケース

if ($http_user_agent ~ Firefox) {
  rewrite ^(.*)$ /firefox/$1 break;
}

if ($http_user_agent ~ MSIE) {
  rewrite ^(.*)$ /msie/$1 break;
}

if ($http_user_agent ~ Chrome) {
  rewrite ^(.*)$ /chrome/$1 break;
}

4. ヒル対策ケース

location ~* \.(jpg|gif|jpeg|png)$ {
  valid_referers none blocked www.idfsoft.com;
  if ($invalid_referer) {
    rewrite ^/ http://www.idfsoft.com/403.html;
  }
}

おすすめ

転載: blog.csdn.net/qq_65998623/article/details/127346155