URL 書き換えモジュール 2.1 URL 書き換えモジュールのルール記述

URL 書き換えモジュール 2.1 URL 書き換えモジュールのルール記述

前提条件

このチュートリアルには次の前提条件が必要です。

IIS は URL 書き換えモジュール 2.1 をインストールします

短縮 URL http://www.iis.net/extensions/URLRewrite

ダウンロードページ

https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads

ダウンロードリンク

https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_en-US.msi

https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_zh-CN.msi

ASP.NET 役割サービスが有効になっている IIS 7 以降。
URL 書き換えモジュールがインストールされています。詳細については、「URL 書き換えモジュールの使用」を参照してください。

テストページの設定

URL 書き換えモジュールがどのように機能するかを示すために、簡単なテスト ASP.NET ページを使用します。このページは、Web サーバーの変数を読み取り、その値をブラウザーに出力します。

次の ASP.NET コードをコピーし、%SystemDrive%\inetpub\wwwroot\ フォルダーの article.aspx という名前のファイルに配置します。

<%@ ページ言語="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<meta http-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8" />
<title>URL 書き換えモジュール テスト</title>
</head>
<本文>
  <h1>URL 書き換えモジュール テスト ページ</h1>
  <テーブル>
   <tr>
     <th>サーバー変数</th>
     <th>値</th>
   </tr>
   <tr>
     <td>元の URL: </td>
     <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
   </tr>
   <tr>
     <td>最終 URL: </td>
     <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
   </tr>
  </テーブル>
</本文>
</html>

このファイルをコピーした後、http://localhost/article.aspx にアクセスし、ブラウザーでページが正しく表示されるかどうかを確認します。

書き換えルールの作成

次の形式を使用して URL を書き換える単純な書き換えルールを作成します。

http://localhost/article/342/記事のタイトル

に:

http://localhost/article.aspx?id=342&title=some-article-title.

IIS マネージャーの URL 書き換え UI を使用して書き換えルールを作成します。これを行うには、次の手順に従います。

1. IIS マネージャーに移動します。

2. デフォルトのWebサイトを選択します。

3. 機能ビューで、「URL 書き換え」をクリックします。

4. 右側の「アクション」ウィンドウで、「規則の追加...」をクリックします。

5. [ルールの追加] ダイアログ ボックスで [空のルール] を選択し、[OK] をクリックします。

ここで、実際の書き換えルールを定義する必要があります。 URL 書き換えモジュールでは、次の 4 つの必須情報を指定して書き換えルールが定義されます。

  • ルール名。
  • URL 文字列と一致するパターン。
  • オプションの条件セット。
  • パターンが一致し、すべての条件チェックが成功した場合に実行されるアクション。

命名規則

[名前] テキスト ボックスに、このルールを一意に識別する名前を入力します (例: 「article.aspx に書き換える」)。

モードの定義

パターン テキスト ボックスに次の文字列を入力します。

^記事/([0-9]+)/([_0-9a-z-]+)

この文字列は、パターンが次の条件を満たすすべての URL 文字列と一致することを指定する正規表現です。

  1. 文字列「article/」で始まります。
  2. 最初の「/」の後に 1 つ以上の数字文字を含めます。
  3. 2 番目の「/」の後に 1 つ以上の英数字、または「_」または「-」文字を含めます。

正規表現の一部が括弧で囲まれていることに注意してください。これらの括弧は、後方参照を使用してルール内で後で参照できるキャプチャ グループを作成します。

アクションの定義

作成するルールは URL を書き換えるものなので、「アクション」グループ ボックスにリストされている「書き換えアクション」タイプを選択します。 「URL の書き換え:」テキスト ボックスに次の文字列を入力します。

記事.aspx?id={R:1}&タイトル={R:2}

この文字列は、入力 URL を書き換える新しい値を指定します。クエリ文字列パラメータの値には、括弧を使用してルールパターンで定義されたキャプチャグループへのバック参照である {R:1} と {R:2} を使用していることに注意してください。

その他の設定はすべてデフォルト値のままにしておきます。受信規則のプロパティの編集ページは次のようになります。

右側の「適用」をクリックしてルールを保存します。

設定ファイル内の書き換えルールを表示する

書き換えルールは、ApplicationHost.config ファイルまたは Web.config ファイルに保存されます。作成したルールの構成を確認するには、%SystemDrive%\inetpub\wwwroot にある Web.config ファイルを開きます。このファイルには、次のルール定義を含む <rewrite> セクションが表示されます。

<書き直し>
 <ルール>
 <rule name="article.aspx に書き換える">
  <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
  <action type="書き換え" url="article.aspx?id={R:1}&amp;title={R:2}" />
 </ルール>
 </ルール>
</書き換え>

上記の構文は、Windows Azure Websites (WAWS) の Web.config で URL 書き換えを構成する場合にも適用されます。

書き換えルールのテスト

ルールが URL を正しく書き換えていることをテストするには、Web ブラウザを開いて次の URL を要求します。

http://localhost/article/234/タイトル

Web サーバーの書き換えルールによって元の URL が Article.aspx に変更され、クエリ文字列パラメータの値として「234」と「some-title」が渡されたことがわかります。

リダイレクトルールを作成する

ここで、すべての URL を次の形式でリダイレクトするリダイレクト ルールを作成します。

http://localhost/blog/some-other-title/543
形式は次のとおりです。
http://localhost/article/543/その他のタイトル

リダイレクト ルールを使用すると、複数の URL を 1 つの Web ページに指定できます。

これを行うには、IIS マネージャーで URL 書き換え機能ビュー UI を開きます。 [ルールの追加...] をクリックし、空のルール テンプレートを再度選択します。

「ルールの編集」ページで、以下を入力します。

  • 名前: ブログからリダイレクト (これはルールの一意の名前です。)
  • パターン: ^blog/([[_0-9a-z-]+)/([0-9]+) (このパターンは、「blog」で始まる URL 文字列と一致し、URL の 2 番目と 3 番目の部分をバック参照としてキャプチャします。)
  • アクション: リダイレクト (リダイレクト アクションにより、リダイレクト応答がブラウザーに返されます。)
  • リダイレクト URL: article/{R:2}/{R:1} (この置換文字列はリダイレクト URL として使用されます。パターン マッチング中にキャプチャされた元の URL を保持および再配置するためにバック参照が使用されることに注意してください。)

以下に示すように、名前、スタイル、アクションを入力します。

以下のようにリダイレクト URL を入力します。

その他の設定はすべてデフォルト値のままにしておきます。右側の「適用」をクリックしてルールを保存します。

リダイレクトルールのテスト

ルールがリクエストを正しくリダイレ​​クトしていることをテストするには、Web ブラウザを開いて次の URL を要求します。

http://localhost/blog/some-other-title/323

リダイレクト ルールの実行により、ブラウザーが http://localhost/article/323/some-other-title にリダイレクトされ、その後、先ほど作成した書き換えルールに従ってリクエストが書き換えられることがわかります。

アクセスブロックルールの作成

3 番目に作成するルールは、ホスト ヘッダーが設定されていない場合、Web サイトへのすべてのリクエストをブロックします。このタイプのルールは、ホスト名を使用する代わりにサーバーの IP アドレスに対して HTTP 要求を行うことによって行われるハッキングの試みを防ぐ場合に役立ちます。

このルールは、IIS マネージャーを使用せずに作成します。この記事の冒頭の article.aspx テスト ファイルに使用した %SystemDrive%\inetpub\wwwroot\ フォルダー内の Web.config ファイルを開きます。 <rewrite> セクションを見つけます。次のルールを <rules> コレクションに挿入し、コレクションの最初のルールにします。

<rule name="不正なリクエストを失敗させる">
 <マッチURL=".*"/>
 <条件>
 <入力を追加="{HTTP_HOST}" パターン="localhost" 否定="true" />
 </条件>
 <アクション タイプ="中止要求" />
</ルール>

<rewrite> セクションは次のコードのようになります。

<書き直し>
 <ルール>
 <rule name="不正なリクエストを失敗させる">
  <マッチURL=".*"/>
  <条件>
  <入力を追加="{HTTP_HOST}" パターン="localhost" 否定="true" />
  </条件>
  <アクション タイプ="中止要求" />
 </ルール>
 <rule name="ブログからリダイレクト">
  <match url="^blog/([_0-9a-z-]+)/([0-9]+)" />
  <action type="Redirect" url="article/{R:2}/{R:1}" redirectType="見つかりました" />
 </ルール>
 <rule name="article.aspx に書き換える">
  <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
  <action type="書き換え" url="article.aspx?id={R:1}&amp;title={R:2}" />
 </ルール>
 </ルール>
</書き換え>

ルールを分析して、それが何をするのか理解してみましょう。

<マッチURL=".*"/>

上記の要素は、このルールが任意の URL 文字列に一致することを示します。

<入力を追加="{HTTP_HOST}" パターン="localhost" 否定="true" />

上記の要素は、サーバー変数 HTTP_HOST を読み取り、それをパターン「localhost」と照合し、結果を否定することで、Host ヘッダー値を取得する条件をルールに追加します。つまり、条件はホスト ヘッダーが「localhost」と一致しないことを検証します。

<アクション タイプ="中止要求" />

上記の要素は、URL 書き換えモジュールに HTTP リクエストを終了するように指示します。

アクセスブロックルールのテスト

このルールをテストするには、Web ブラウザーを開いて、http://127.0.0.1/article/234/some-title にリクエストを送信します。ブラウザがサーバーから応答を受信して​​いないことがわかります。ただし、http://localhost/article/234/some-title をリクエストすると、Web サーバーは正常に応答します。

失敗した表示は次のとおりです。

成功は次のように表示されます。

まとめ

このチュートリアルでは、IIS マネージャーを使用するか、Web.config ファイルを手動で編集して URL 書き換えルールを構成する方法を学習しました。このチュートリアルで作成されるルールは、正規表現のサポートや、HTTP ヘッダーとサーバー変数を使用して書き換えを決定する機能など、URL 書き換えモジュールのいくつかの重要な機能を示しています。

<<:  Vue はトークンの有効期限が切れると自動的にログインページにジャンプする機能を実装します

>>:  HTMLテーブルタグの詳しい解説(初心者向け)

推薦する

Linux で Scala 環境を構築し、簡単な Scala プログラムを書く

Linux に Scala 環境をインストールするのは非常に簡単です。Ubuntu 環境であれば、さ...

Typescript+React でモバイルと PC でシンプルなドラッグ アンド ドロップ効果を実現

この記事では、モバイルとPCで簡単なドラッグアンドドロップ効果を実現するためのTypescript ...

ハンドラー PageHandlerFactory-Integrated のモジュール リストに不正なモジュール ManagedPipelineHandler が含まれています

Web プロジェクトを開発する場合、IIS をインストールする必要があります。IIS がインストール...

MySQL inndbジョイントインデックスを正しく使用する方法を徹底的に理解するためのケーススタディ

最近確認された5件のデータを照会するビジネスがあります。 `id`、`title` を選択 `th_...

HTML フォームタグチュートリアル (2):

このチュートリアルでは、ウェブデザインにおけるFORMフォームタグのさまざまな属性の応用を紹介します...

フロントエンドページのポップアップマスクはページのスクロールを禁止します

フロントエンド開発者がよく遭遇する問題は、ユーザーに情報を提示するためのポップアップ ウィンドウを作...

Centos7 で Java8 と MySQL をインストールしてデプロイする

通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...

MySQLデータベースの基礎知識と操作のまとめ

この記事では、例を使用して、MySQL データベースの基本的な知識と操作について説明します。ご参考ま...

mysqlは2つ以上のフィールドがNULLであるレコードを見つける問題を解決します

コアコード /*-------------------------------- 2つ以上のフィール...

MySQLデータベースのストアドプロシージャとトランザクションの違い

トランザクションは、複数の SQL ステートメントの原子性、つまり、それらが一緒に完了するか、一緒に...

Linux での nginx のインストール、展開、使用方法の詳細な説明

目次1. ダウンロード2. 展開3. Nginxログ関連の設定4. ファイルダウンローダーとして n...

Mysql が CPU を過剰に占有する場合の最適化方法 (必読)

Mysql が CPU を占有しすぎる場合、どこから最適化を開始すればよいでしょうか? CPU 使...

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

vue3 の setUp とリアクティブ関数の使用方法の詳細な説明

1. いつsetUpを実行するかvue3 ではメソッドを正常に使用できるようになったことは誰もが知っ...