この記事では、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 で遅延読み込みを使用して最初の画面の読み込み時間を短縮する方法
MySQL ステートメントの書き込み順序と実行順序には大きな違いがあります。書き順、mysql の一...
1. CSSの記述形式1. インラインスタイルCSSコードを開始タグに直接記述することができます&l...
文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...
1. /etc ディレクトリ内の、文字以外の文字で始まり、その後に文字と任意の長さのその他の文字が続...
リンクを使用する必要がある場合もありますが、リンクする必要はありません。onclick イベントを処...
最近、プロジェクトでは kubernetes (以下、k8s と表記、k と s の間には 8 つの...
この記事では、バウンドボールゲームを実装するためのjQueryの具体的なコードを参考までに共有します...
環境名前財産CPU 5650 円メモリ4Gディスク20G+4TB この時点で、サーバーにはすでに次の...
なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...
データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。参照整合性:参照整合性...
bitronix を使用して MySQL に接続するときの MySQLSyntaxErrorExce...
このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...
mysql 効率的なクエリMySQL は、左結合の速度を上げるために group by を犠牲にし...
この記事の例では、参考のために画像をサーバーにアップロードするためのjsの具体的なコードを共有してい...
この記事では、例を使用して、MySQL 8 の共通テーブル式 (CTE) の使用方法を説明します。ご...