最近、私は自分のブログ プログラムで忙しいので、必然的にブログでよく話題になる URL 書き換えの問題に目を向けました。理由の 1 つは、マルチユーザー ブログ システムにおける顔の問題です。当初は CSDN ブログhttp://blog.csdn.net/joshualang を例として使用したかったのですが、考え直して自分のスペース ( http:/)を使用しました。 /www. tyoo.net )、ブログを終えた後はここに行く予定です。
http://www.tyoo.net/blog/joshualangのように必要な URL の書き換えが行われていない場合は、 http://www.tyoo.net/blog/default.aspx?Bloger=joshualangのようなブログ アドレスが表示されます。実生活では、ほとんどのネチズンはブログをインターネット上に建てた別の家とみなしていることを知っておく必要があります。同様に、インターネット上の家にも住居番号が必要です。それは覚えやすいです。この番地は長すぎず (あまりまともではありません)、その後に大量のパラメーターを追加すると、記事を読みたい場合は、http:// blog.tyoo.net のように多くのことに直面する必要があります。/Articles/Default.aspx?Bloger=joshualang&ArticleID=20070118234530何か感じましたか?現在多くのブログ プログラムに備わっている効果を見てみましょう: http://blog.tyoo.net/joshua/Articles/2007/01/18/この効果の利点は誰でも一目でわかります。これはこれです。この記事の重要なポイントを説明します。
はい、このような非常に規則的な文字列を通じて目標の 1 つを達成する必要があります。
実行可能な URL は、次の基準に従って選択する必要があります。
• 短い。
• 入力が簡単です。
• サイトの構造がわかる。
• 「Truncatable」。ユーザーは URL のコンポーネントを削除してサイトを閲覧できます。
実際、この点についてはこれ以上説明する必要はありません。シンプルさと実用性がすべてです。
注: そういえば、MSDN Web サイトhttp://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?pf=true#topに
ある
Scott Mitchell のドキュメントを読む必要があります。一部の専門家は、URL 書き換えの原則をここで十分に明確にしています。理解できない場合は、上記のドキュメントのソース コードをダウンロードして勉強してください。
効率化のため(人の時間は貴重ですが、プログラマの時間はさらに貴重です)、私は URLRewriter.net のコンポーネントを直接使用しました。実際、これまで URL 書き換えの経験がなかったので、ソースを大まかに読みました。プログラムを数回実行し、開始しました。もちろん、最初は技術的な内容は必要ありませんが、リライトが成功すれば気分が良くなります。その後、リライトを続ける中で問題点が見つかり、新たなアイデアや発見が得られます。 。 。そこでこの記事です。
さあ始めましょう。今回は実際に、先ほど述べた日付パターンの URL 書き換えに焦点を当てます。
http://blog.tyoo.net/Articles/2007/01/18/233030/joshualang.aspxこれが、ここで達成される最終的な効果です。 。
基本: UrlRewriter.net コンポーネント (もちろん自分で作成することもできます)、正規表現
パラメータを理解します: ArticleID //記事番号 [タイプ: 文字列 長さ: 14 (例: yyyymmddhhmmss) // 意味があり、繰り返されません]
Bloger // ブログマスター ユーザー名 [型: 文字で始まる文字列]
URL 書き換えプロセス中に発生する問題の 1 つは、存在しないディレクトリまたはファイルにアクセスしたときの 404 エラーです。 MSDN のこのドキュメントで提供されている提案は、プログラム ディレクトリに必要なフォルダーと空のページを作成することです。これは確かに面倒で、何千ものディレクトリを作成する必要があります。
存在しないディレクトリ ファイルにアクセスすることはできないため、そのようなディレクトリにアクセスする必要はありません。既存のファイルにアクセスする必要があります (すべての URL はブログのルート ディレクトリにある Default.aspx ページを指しており、その後、コントロール グループを動的に読み込んで別のビュー関数ページを生成します)。 this page ~/Default .aspx;
次のタスクはパラメータを渡すことです。もちろん、URL は値によって渡されます。だからこそ、書き直す時期が来たのです。
主人公は正規表現です。
ここでの正規表現の使用は本当に素晴らしいです ~ http://blog.tyoo.net/joshualang/Articles/2007/01/18/Default.aspxディレクトリでは、次のような URL 書き換えルールを生成できます。
< RewriterRule>
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4</SendTo>
</リライタールール>
このように記述したルールを削除すると、アクセスしているページが存在しないため、必ず404エラーが発生します。
ディレクトリ マークに沿って下まで検索するため、別のディレクトリ プロジェクトを作成すると、次のコード
が大きすぎます。
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6})/Default.aspx</LookFor >
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4&time=$5</SendTo>
</リライタールール>
時間に余裕ができたので、ディレクトリを作成しようとする人は誰もいないでしょう。次に、既存のファイルを最大限に活用してこのタスクを完了します。
実際、多くの人はディレクトリ構造の代わりにファイル名を使用することを考えているかもしれません。そういえばそうですよね。もちろん、これには正規表現についてのある程度の理解が必要です。
さて、それがどのように機能するかを見てみましょう。
<リライタールール>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6}).aspx</探す>
<SendTo>~/Default.aspx?ArticleID=$2$3$4$5&Bloger=$1</SendTo>
</リライタールール>
「/」をエスケープするために「」を使用し、それをファイル名に使用していることが簡単にわかります。現在の構造は
http://blog.tyoo.net/joshualang/2007/01/18 です。
明らかに、私の ArticleID です。は、年、月、日、時、分、秒に基づく文字列です。重複を考慮せずにデータを挿入するのが合理的であり、ここで時間を使用するとクエリにも便利です。 $2$3$4$5 で得られる 14 桁の組み合わせが私の ArticleID であり、その記録は出版日と記事番号から簡単に見つけることができます。最後の利点は、削除する場合に特に顕著です。
次に、時刻部分を削除しましょう:
<RewriterRule>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$2$3$4&Bloger=$1</SendTo>
</リライタールール>
次に、URL を次のパターンに削除します: http://blog.tyoo.net/joshualang/Articles/2007.aspxまたはhttp://blog.tyoo.net/joshualang/Articles/Default.aspx です
。とても簡単なことではありませんか?しかし、問題に注意する必要があります。どんなことも不可能ではなく、達成できるということです。http:
//blog.tyoo.net/joshualang/Articles/2007.aspxやhttp: //blog. tyoo.net/joshualang/Articles/2007/.aspx の違いは何ですか? 後者は上記のルールに従っても正常に実行できますか?
同じことは言えません
。http: //blog.tyoo.net/joshualang/Articles/2007/01/08/.aspxも受け入れられません。適切な書き換え効果を実現するには、他の応答ルールを定義する必要があります。
さて、その効果はおおよそ次のとおりです。完全なルール コードは次のとおりです。
<!--著者: Joshua Li ( [email protected] ) QQ:245965348-->
<!-- ブログ コンテンツ表示ツールのルール -->
<リライタールール>
<LookFor>~/([A-Za-z]w{5,16})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</リライタールール>
<!-- 記事リストのルール -->
<リライタールール>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/(d{1,6})/([A-Za-z]w {5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4&Bloger=$5</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/(d{1,6})((/)?).aspx</探す>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/([A-Za-z]w{5,16}).aspx</探す>
<SendTo>~/Default.aspx?ArticleID=$1$2$3&Bloger=$4</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/(d{4})/(d{2})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2&Bloger=$3</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/(d{4})/(d{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/(d{4})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1&Bloger=$2</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/(d{4})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</リライタールール>
<リライタールール>
<LookFor>~/Articles/Default.aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=-1</SendTo>
</リライタールール>
注: ここでは、ユーザーが重要な .aspx 拡張子を誤って削除しないようにするために、ファイルの仮想識別名としてユーザー名を使用します。
取得した最終URL: http://blog.tyoo.net/Articles/2007/01/18/015000/joshualang.aspx
同時に末尾の最大6桁の時刻を削除可能かつ長めに設定し、また、特定の番号を使用して、発行時刻に最も近いリストを見つけることも最も便利です。
ユーザー名を削除しても、使用には影響しません。詳細な時刻形式を通じて、必要な記事の最適なリストをすばやく取得できます。ユーザー名がそのままであれば、削除することで特定の期間の著者に該当する記事の一覧を見つけることができます。
ユーザー名の形式 ([A-Za-z]{6-16}) とルール検証の順序にも注意してください。
要約:
通常の URL 書き換えプロセスを通過すると、このディレクトリが実際に存在するかのように厳密な形式になりますが、フレームワーク構造はより便利で柔軟になるため、機能とユーザー エクスペリエンスが大幅に向上します。ご質問がございましたら、返信してディスカッションに参加してください。もっと良い書き換え方法があれば、ぜひ教えていただきたいと思います。
http://www.cnblogs.com/Joshualang/archive/2007/01/19/624302.html