5

パスの各フォルダーを特定のクエリパラメーターとして取得できるようにするために、 Apache を使用したいとmod_rewrite考えています。たとえば、次のことを検討してください。

基本的な例

要求された URL:http://domain.com/shoes/prada/image-1/

提供されたページ:http://domain.com/?cid=shoes&bid=prada&pid=image-1

このシナリオでは、要求された 3 つのサブフォルダー ( /shoes//prada/次にimage-1) があるため、最初のサブフォルダーは として提供される実際のページで渡されcid、2 番目は としてbid、3 番目は として渡されますpid

完全な例

ただし、リクエストされたサブフォルダーの数に応じて、特定のページを提供したいと思います。

要求された URL:http://domain.com/shoes/prada/

提供されたページ:http://domain.com/shop.php?cid=shoes&bid=prada

これまでのところ、見つけることができたのは正規表現ベースmod_rewriteのマッチングだけですが、パスは大きく異なるため、アクセスしたフォルダーの数に基づいて条件を設定したいと考えています (注意してください、私は正規表現が得意ではありません) - ワイルドカード文字がこれに役立つと思いますが、どこから始めればよいかわかりません)。

これに関する助けがあれば大歓迎です!これはかなり長くなりました。明確にするためにさらに情報が必要な場合は、お知らせください。

4

1 に答える 1

8

ちょっとした作業で、いくつかの正規表現を微調整して、必要な作業ルール セットを取得することができました。

RewriteEngine on
RewriteRule ^(.*)/(.*)/(.*)/(.)?$ product.php?tid=$1&sid=$2&eid=$3 [L]
RewriteRule ^(.*)/(.*)/(.)?$ brand.php?tid=$1&sid=$2 [L]
RewriteRule ^(.*)/(.)?$ shop.php?tid=$1 [L]

これは例とは少し異なりますが、最初に意図したものです。

これにより、各フォルダーの「名前」をパラメーターとして指定して、URL の最大 4 つのフォルダーの深さを書き換えることができます。深さの追加レベルごとに、URL を別のリソースに書き換えることができます。次に例を示します。

http://x.com/shoes/prada/2011-high-heels/ -> http://x.com/product.php?tid=shoes&sid=prada&eid=2011-high-heels

http://martinmelin.se/rewrite-rule-tester/でテスト済み

于 2013-04-21T23:29:37.767 に答える