9

私は「きれいな」URL(たとえば/Products/Edit/1の代わりに/products.aspx?productID=1)を持つことを本当に楽しんでいますが、多数の変数で検索できるページに対してこれを行う方法に迷っています。

たとえば、ユーザーが特定の名前と特定の住所の近くにある特定のタイプのすべての製品を検索できるページがあるとします。本当に長い「きれいな」URLでこれを行いますか

/Products/Search/Type/{producttype}/Name/{name}/Address/{address}

または、URLパラメータを使用するだけです

/Products/Search?productType={producttype}&name={name}&address={address}
4

6 に答える 6

7

この質問は主に URL の設計に関するもので、ついでに書き換えに関するものです。URL をクールに設計したら、サーバー レベルでの書き換えや、URL ベースのディスパッチを行う Web フレームワークの使用など、さまざまな方法で URL を機能させることができます (最近のほとんどの Web フレームワークはこれを行っていると思います)。

美しさは見る人の目にありますが、多くの検索 URL が醜いという意見には同意します。何が彼らをそうさせるのですか?URL を醜くする主な原因は、意味的な意味を追加するのではなく、(.aspx) やその他の拡張子などの実装の詳細の結果である URL の粗雑さだと思います。私のルールは、URL が (X)HTML を返す場合は拡張子を付けるべきではなく、それ以外の場合は付けるべきです。

検索の場合、実際には、標準の検索構文が意味を追加します。これは、ページが検索であることを示し、引数に名前が付けられ、並べ替え可能であることを示します。醜さは主に ?&= 文字に由来しますが、実際にはこれらの同じ文字を |-/ のようなより魅力的な文字に置き換えることになりますが、URL を解析しようとするソフトウェアに対して URL を不透明にするという代償を払います。スパイダー、キャッシング プロキシ サーバーなどのようなものです。

したがって、標準の構文を使用しないことについて慎重に検討し、それを行う十分な理由があることを確認してください。引数に自然な順序があり、検索が意味なしてコンパクトになるようにすべて定義する必要がある場合は、それを URL にプッシュすることができます。たとえば、ブログの URL には次のようなものがあります。

/weblog/entries/2008
/weblog/entries/2008/11
/weblog/entries/2008/11/22

2008 年、2008 年 11 月、2008 年 11 月 22 日のエントリをそれぞれ定義する検索の場合。URL は一意で明確である必要があります。/-/ を入力して検索パラメータが欠落している場合もありますが、これは非常にコンパクトだと思います。ただし、自由形式のテキスト クエリなど、長い可能性のあるパラメーターを URL にプッシュすることは避けます。/weblog/entries/containing/here%20is%20some%20freeform%20text%20blah%20blah は、クエリ構文を使用するよりも魅力的ではありません。

標準のクエリ構文を使用する場合は、意味のある引数名を選択すると、魅力がいくらか向上する可能性があります。products/search?description="blah" は長いですが、おそらく products/search?q="blah" よりも優れています。この時点で、収益は減少していると思います。

于 2008-09-24T18:27:26.570 に答える
6

「きれいな」URLを取得することはできますが、最も美しい手段を使用することはできません。

URLを次のように設定できます。

/Products/Search/Type/{producttype}/Name_{name}/Address_{address}

次に、mod_rewriteルールは次のようになります。

RewriteRule ^Products/Search/Type/([a-z]+)(.*)?$ product_lookup.php?type=$1&params=$2 [NC,L]

product_lookupこれにより、ファイルに2つのパラメーターが与えられます。

$type = {producttype}
$params = "/Name_{name}/Address_{address}"

次に、ファイルにいくつかのロジックを実装product_lookup.phpしてループし$params、「/」で分割し、「_」の前にあるものに従ってトークン化し、結果のパラメーターを通常どおり検索に使用できます。

// Split request params first on /, then figure out key->val pairs
$query_parts = explode("/", $params);
foreach($params as $param)
{
    $param_parts = explode("_", $param);
    // Build up associative array of params
    $query[$param_parts[0]] = $param_parts[1];
}
// $query should now contain the search parameters in an assoc. array, e.g.
// $query['Name'] = {name};

パラメータをPOSTではなく「きれいな」URLとして使用すると、ユーザーは特定の検索をより簡単にブックマークできます。

この動作の例は次 http://www.property.ie/property-for-sale/dublin/ashington/price_200000-550000/beds_1/ のとおりです。ユーザーが選択したパラメータは「_」(価格帯とベッド)で示され、読みやすいURLを維持しながら、必要なパラメータ形式に内部的に変換できます。

上記のコードは、エラーチェック(入力の不正な区切り文字など)のない簡単な例ですが、どこから始めればよいかがわかるはずです。

また、LAMPスタック(mod_rewriteおよびPHPの場合はApache)を想定していますが、asp.netおよび同等のIISmod_rewriteを使用して同じ行に沿って実行できます。

于 2008-09-24T18:20:48.783 に答える
1

同様のURL書き換えがあり、IIS 6を使用すると、リダイレクトは次のように定義されます。

/content.aspx?url=$S&$P

これはフォームのURLを取ります

/ content / page/press_roomそしてそれをフォーマットにします

/content.aspx/url=/page/pressroom&

IISにある完全なsynyaxオプションについてはわかりませんが、同様の方法で必要な処理を実行できると確信しています。

于 2008-09-24T18:16:49.667 に答える
1

前に述べたように、HTTP Postを使用するのが最善ですが、そうすると、人々がリンクを人々に送信したり、ブックマークしたりすることができなくなります。クエリ文字列をURLに残しておくことは、それほど悪くはありません。URL文字列が次のようになるように設定しました。

http://example.com/search/?productType={producttype}&name={name}&address={address}

次に、検索結果をページ分割するために、クエリ文字列の前にページ番号を追加します(したがって、クエリ文字列は必要に応じてカスタマイズできます。

  • ページ1: http : //example.com/search/?productType= {producttype}&name = {name}
  • ページ2: http : //example.com/search/2/?productType= {producttype}&name = {name}
  • ページ3: http : //example.com/search/3/?productType= {producttype}&name = {name}

等...

結局のところ、検索の王様である「Google」は、URLにクエリ文字列を残してもかまわないので、それほど悪くはありません:)

于 2008-09-24T18:20:00.940 に答える
1

MVC (モデル ビュー コントローラー) フレームワークは、この問題に対処するために特別に設計されています。URL 書き換えの形式を使用してアクションをページにリダイレクトし、探している機能だけを提供します。これにより、きれいな URL の処理が簡単になります。

URL の長さに関しては、id は引き続きかなりの URL を使用しますが、特に長い URL は、アイテムのグループ化を再検討する必要があることを示している可能性があります。必要に応じて分類を変更してください Products/{NAME}/{Address}中間 URL 部分なし。

MVC フレームワークの例は、次の場所にあります。

.Net - http://www.asp.net/mvc/

PHP - http://www.phpmvc.net/

Java - http://struts.apache.org/

于 2008-09-24T18:14:26.023 に答える
0

.NETでのルーティングに関する回答は次の場所にあります。

ASP.Netで動的URL書き換えを実現するための最良の方法は何ですか?

そこでは、このテーマに関するさまざまなリソースを見つけることができます。

于 2008-09-24T18:18:20.773 に答える