.NET TIPS

[ASP.NET]複雑なURLを別のURLにリマッピングするには?[2.0のみ、C#、VB]

山田 祥寛
2006/09/22

 Webアプリケーションを構築するうえで、複雑なURLが好ましくないことはいうまでもない。複雑なURLはエンド・ユーザーが覚えにくい、タイプミスしやすいというデメリットもさることながら、検索エンジンのクロールを阻害する一因になることから、SEO(検索エンジン最適化)という観点でもマイナスとなる場合があるためだ。

 例えば、以下のようなURLを想定してほしい。

http://www.example.com/default.aspx?category=1&id=A-01
http://www.example.com/default.aspx?category=1&id=A-02
http://www.example.com/default.aspx?category=1&id=A-03

 検索エンジンのクローラは、このようにクエリ情報のみが異なるURLを「内容の類似した同じページ」と見なし、クロールしない可能性がある。一部の検索エンジンでは、クエリ・パラメータが1つまでならばクロールするなど、ルールはさまざまあるようだが、特定の検索エンジンに依存しないという意味では、極力、URLからクエリ・パラメータを除外するに越したことはないだろう。

 そこでASP.NET 2.0では、実際のURLをよりシンプルな短いURLでリマッピングするための機能を提供している。例えば、以下のページはクエリ・パラメータcategoryの値によって表示を切り替えるごく単純なWebフォームだ(なお、本稿では具体的なコードは割愛する)。

クエリ・パラメータcategoryによって表示メッセージを切り替えるWebフォーム(上:UrlMapping.aspx?category=morning、下:UrlMapping.aspx?category=night)
「category=morning」の場合は「おはようございます」、「category=night」の場合は「こんばんは」を表示する。

 このWebフォームでは「〜/UrlMapping.aspx?category=morning」と指定された場合には「おはようございます」、「〜/UrlMapping.aspx?category=night」と指定された場合には「こんばんは」というメッセージを表示する。

 これらのURLを、それぞれ「Morning.aspx」「Night.aspx」にリマッピングしてみよう。この設定は次のようにWeb.configに記述する。

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <urlMappings enabled="true">
      <add url="~/Morning.html"
        mappedUrl="~/UrlMapping.aspx?category=morning" />
      <add url="~/Night.aspx"
        mappedUrl="~/UrlMapping.aspx?category=night" />
    </urlMappings>
  </system.web>
</configuration>
オリジナルのURLを異なるURLにリマッピングするための設定(Web.config)

 リマッピング設定を行うのは、<urlMapping>/<add>要素の役割だ。mappedUrl属性にはオリジナルのURLを、url属性にはリマッピングした先のURLを、それぞれアプリケーション・ルートを基点とした相対パスで指定すればよい。

 以上の設定を追加したら、実際に「〜/Morning.aspx」「〜/Night.aspx」でアクセスしてみよう。それぞれ「〜/UrlMapping.aspx?category=morning」「〜/UrlMapping.aspx?category=night」の内容が表示されれば成功だ。

リマッピングした結果(上:Morning.aspx/下:Night.aspx)
「Morning.aspx」の場合は「おはようございます」、「Night.aspx」の場合は「こんばんは」を表示する。

 ちなみに、<urlMapping>/<add>要素のurl属性には(例えば)「Morning.html」と指定することで、あたかも静的なファイルにアクセスしているように見せ掛けることも可能だ。

リマッピングした結果(Morning.html)
静的なHTMLファイルにアクセスしているように見えるが、実際には「UrlMapping.aspx?category=morning」にリマッピングされている。

 ただし、拡張子「.html」はデフォルトではASP.NETが認識しないので、あらかじめ該当の拡張子とASP.NETエンジン(aspnet_isapi.dll)の関連付けを行う必要がある。拡張子の関連付けについては、「TIPS:[ASP.NET].htmlや.pdfファイルをフォーム認証やロギングの対象にするには?」が詳しいので、こちらも併せて参照いただきたい。

 なおこの際に注意点がある。次の画面は実際に、aspnet_isapi.dllに拡張子「.html」を関連付けているところだ。

[アプリケーションの拡張子マッピングの追加/編集]ダイアログ
aspnet_isapi.dllに拡張子「.html」を関連付ける。実ファイルは存在しないので、「ファイルの存在を確認する」のチェックは外すこと。

 マッピングした拡張子「.html」の実ファイルは存在しないので、「ファイルの存在を確認する」のチェックは外さなければならない。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:
Webフォーム 処理対象:URL
使用キーワード:<urlMapping><add>要素
使用キーワード:<add>要素
関連TIPS:[ASP.NET].htmlや.pdfファイルをフォーム認証やロギングの対象にするには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET].htmlや.pdfファイルをフォーム認証やロギングの対象にするには?
ClickOnceアプリの起動時にパラメータを渡すには?
相対URLを絶対URLに変換するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH