リライトの使用法と設定、および 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;
}
}