この記事では、Web ページのリンクを美しくするためによく使用される書き換えルールをいくつか紹介します。ルール内の $1$2 がどこから来るのかわからない場合は、最初の () が $1 で、2 番目の () が $2 であることを覚えておいてください。 要求された URL は人間が見るためのものであり、書き換えられた URL はコンピュータが見るためのものです。 検索を実行する このルールの目的は、URL に含まれるキーワードの検索を実行することです。 要求された URL: //hqidi.com/search/some-search-keywords ユーザープロフィールページ 訪問者登録を実行するほとんどの動的 Web サイトには、プロファイルを表示できるページが用意されています。このページの URL には、ユーザーの UID とユーザー名が含まれています。 要求された URL: //hqidi.com/user/47/dige 複数のパラメータ 一部のサイトでは、名前のないパラメータを区切るためにスラッシュ「/」を使用するなど、文字列パラメータに異なる構文を使用します。 要求された URL: //hqidi.com/index.php/param1/param2/param3 百科事典のような形式 この形式は、プレフィックスディレクトリの後に記事名が続く形式です。 要求された URL: //hqidi.com/wiki/some-keywords フォーラム フォーラムでは通常、トピック識別子(トピック)と開始点(開始投稿)の 2 つのパラメータが使用されます。 要求された URL: //hqidi.com/topic-1234-50-some-keywords.html 新しいサイトの記事 この URL 構造は、記事識別子、それに続くスラッシュ、およびキーワードのリストによって特徴付けられます。 リクエストされた URL: //hqidi.com/88/future 最後の疑問符 置換する URI にパラメータ (/app/test.php?id=5 など) が含まれている場合、デフォルトではパラメータが置換文字列に自動的に追加されます。この問題は、置換文字列の末尾に ? マークを追加することで解決できます。 ^/users/(.*)$ /show?user=$1? last を書き換えます。 ワンプラスを比較しますか?マークされているかどうか?マークされた URL ジャンプの違い: ^/test(.*)$ //hqidi.com/home を premanent に書き換えます。 //hqidi.com/test?id=5 にアクセスし、301 リダイレクト後、URL アドレスは //hqidi.com/home?id=5 になります。 ^/test(.*)$ //hqidi.com/home? premanent を書き換えます。 //hqidi.com/test?id=5 にアクセスすると、301 リダイレクト後の URL は //hqidi.com/home になります。 Nginx の書き換え機能には PCRE ソフトウェアのサポートが必要です。つまり、ルールのマッチングは Perl 互換の正規表現ステートメントを通じて実行されます。デフォルトのパラメータでnginxをコンパイルすると、書き換えモジュールがサポートされますが、PCREのサポートも必要です。 rewrite は URL 書き換えを実装するためのキー命令です。regex (正規表現) 部分に従って置換にリダイレクトし、フラグタグで終了します。 nginx 書き換え命令の実行順序 1. サーバーブロックの書き換え命令を実行します(ここでのブロックは、サーバーキーワードの後の{}で囲まれた領域を指し、他のxxブロックも同様です) いずれかのステップで URI が書き換えられると、実際のファイルが見つかるまでステップ 1 ~ 3 がループで再度実行されます。 ループが 10 回を超えると、500 内部サーバー エラーが返されます。 フラグ rewrite の構文は非常に単純です。 正規表現URLを書き換える[フラグ]; rewrite はキーワード、regex は正規表現、URL は置換されるコンテンツ、[flag] はフラグ ビットを意味し、次の値を持ちます。
301 と 302 は単純にステータス コードだけを返すことはできないため、リダイレクト URL も必要です。これが、戻り命令が 301、302 を返すことができない理由です。ここでの last と break の違いは少しわかりにくいです:
簡単な例を見てみましょう: ^/listings/(.*)$ /listing.html?listing=$1 を最後に書き換えます。 ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? を書き換えます。 最初の書き換えルールでは、http://mysite.com/listing.html?listing=123 の代わりに、フレンドリ URL である http://mysite.com/listings/123 を使用できます。これは、ブラウザのアドレス バーに http://mysite.com/listings/123 と入力するのと同じで、実際にアクセスされる URL リソースは http://mysite.com/listing.html?listing=123 です。 2 番目のルールでは、http://mysite.com/images/bla_500x400.jpg 形式のファイル要求がアドレス http://mysite.com/resizer/bla.jpg?width=500&height=400 に書き換えられ、場所の一致が試行され続けます。 if命令とグローバル変数 if 命令の構文は if(condition){...} であり、指定された条件を判断します。 true の場合、中括弧内の書き換えディレクティブが実行されます。 コードのルールを見てみましょう: $http_user_agent の場合: 書き換え^(.*)$ /msie/$1 break; } //UA に "MSIE" が含まれている場合は、リクエストを /msid/ ディレクトリに書き換えます if ($http_cookie ~* "id=([^;]+)(?:;|$)") { $id を $1 に設定します。 } //クッキーが正規表現に一致する場合、変数$idを正規表現の参照部分と同じ値に設定します。if ($request_method = POST) { 405 を返します。 } // 送信方法が POST の場合、戻りステータスは 405 (メソッドが許可されていません) になります。戻る 戻ることができない 301,302 もし($遅い){ 制限レート 10k; } //速度制限$slowはsetコマンドで設定できます if (!-f $request_filename){ 壊す; プロキシパス http://127.0.0.1; } // 要求されたファイル名が存在しない場合は、localhost にリバース プロキシします。ここでのbreakは書き換えチェックも停止します。if ($args ~ post=140){ ^ http://mysite.com/ を永久的に書き換えます。 } //クエリ文字列に「post=140」が含まれている場合は、mysite.com に永続的にリダイレクトします if 命令では、グローバル変数を使用できます。これらの変数は次のとおりです。
リターンを使用してジャンプする 場合によっては、次のルールのように、Nginx で rewrite を使用して 301 アドレス ジャンプを実行する必要があります。 ^ $scheme://www.mysite.com$request_uri を永続的に書き換えます。 任意の URL にアクセスすると、301 で URL www.mysite.com に永続的にリダイレクトされます。この書き方は正しいのですが、rewrite正規マッチングを使用するため、ある程度のリソースが消費されてしまうため、nginx公式サイトではこの書き方は推奨されていません。 return を使用して 301 リダイレクトを実現することもできます。これはシンプルで実用的です。例をご覧ください。 301 新しいドメイン名に恒久的にリダイレクトします サーバー{ 聞く 80; 443 ssl を聴く; サーバー名 www.old-name.com old-name.com; 301 $scheme://www.new-name.com を返します。 } 上記のコードは、古いドメイン名から新しいドメイン名への 301 リダイレクトを実装します。Web サイトを新しいドメイン名に変更する必要がある場合は、この方法を使用して 301 リダイレクトを実行します。 www のないドメインから www のあるドメインへの 301 リダイレクト サーバー{ 聞く 80; 443 ssl を聴く; サーバー名 mysite.com; 301 $scheme://www.mysite.com$request_uri を返します。 } http サイトから https サイトへの 301 リダイレクト サーバー{ 聞く 80; サーバー名 www.mysite.com; 301 https://www.mysite.com$request_uri を返します。 } 以上がNginxの書き換えとリダイレクトの紹介です。役に立ったと思ったら何度も練習して、迷子にならないようにこの記事を保存しておいてください。皆様も123WORDPRESS.COMを応援して頂ければ幸いです。 以下もご興味があるかもしれません:
|
<<: React で遅延読み込みを使用して最初の画面の読み込み時間を短縮する方法
序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...
Swarm クラスター管理導入Docker Swarm は Docker 用のクラスター管理ツールで...
この記事では、カレンダー効果を実現するためのjQueryの具体的なコードを例として紹介します。具体的...
導入最近、大きな課題をこなす際に、弾幕プレイヤーを作る必要がありました。他の人のソースコードを借りて...
この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...
目次1. ビューフック1. ngAfterViewInit および ngAfterViewCheck...
開発者が Dockerfile を使用してイメージをビルドする場合は、イメージをビルドするときにデー...
Brotli は、Zopfli よりも 20 ~ 26% 高い圧縮率を実現できる新しいデータ形式です...
Selenium Grid の紹介Selenium Grid のいくつかの新しい機能は、今後リリース...
最近、電子アーカイブに取り組んでおり、バックエンドではファイルの Huawei Cloud OSS ...
1. 使用シナリオこのような要件があるため、システムが開発されました。ユーザーがデスクトップを離れ...
この記事では、HTTP プロトコルのリファラーのメタデータ パラメータの提案について説明します。この...
目次1. COUNTの初見2. COUNT(フィールド)、COUNT(定数)、COUNT(*)の違い...
目次序文仮想リストとは何ですか?デモ効果準備スクリーンの高さとボックスの高さ最適化要約する序文人気の...
RFC793 ドキュメントの SYN フラグを持つプロセス パケットはデータを伝送できません。つま...