「きれいな」URLを取得することはできますが、最も美しい手段を使用することはできません。
URLを次のように設定できます。
/Products/Search/Type/{producttype}/Name_{name}/Address_{address}
次に、mod_rewriteルールは次のようになります。
RewriteRule ^Products/Search/Type/([a-z]+)(.*)?$ product_lookup.php?type=$1¶ms=$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を使用して同じ行に沿って実行できます。