0

mysite.com/categoryName/やなどの URL を処理する URL 書き換えルールを作成しmysite.com/categoryName/productName/、それらを別のハンドラにルーティングしようとしています。私の .htaccess ファイルで、次を使用する場合:

RewriteRule shop/(.*^/)/$ view.php?mode=category&id=$1
RewriteRule shop/(.*)/(.*)/$ view.php?mode=product&id=$2

製品ページは正しく書き換えられますが、カテゴリ URL は 400 をスローします。

RewriteRule shop/(.*[^/])/$ view.php?mode=category&id=$1
RewriteRule shop/(.*)/(.*)/$ view.php?mode=product&id=$2

逆のことが起こります (カテゴリ ページは表示されますが、製品ページでは 400 秒)。

これが私の RegEx の問題なのか (ほとんどの場合)、いくつかの URL を両方のルールでチェックする必要があるのか​​、それとも 1 つのルールで両方の書き換えを行う方法があるのか​​ どうかはわかりません。任意の入力をいただければ幸いです。前もって感謝します!

4

1 に答える 1

3

通常、ドットを使用.することは、明示的でない意図の悪い兆候であり、混乱を招く可能性があります。また、貪欲であるため、混乱が増します。代わりに、2番目の例にあるようなものを使用してください...

([^/]+)これは、「否定された character-class[^...]にないものすべて。この場合はスラッシュのみです。無限回繰り返され、必須です ( +URL には必須をお勧めします):

RewriteRule shop/([^/]+)/$ view.php?mode=category&id=$1
RewriteRule shop/([^/]+)/([^/]+)/$ view.php?mode=product&id=$2

また、製品ルールの書き換えを表示するときにカテゴリを処理している可能性がある問題も見られます。100% 確実にするには、次のように処理する必要があります。

RewriteRule shop/([^/]+)/$ view.php?category=$1
RewriteRule shop/([^/]+)/([^/]+)/$ view.php?category=$1&product=$2

しかし、それはおそらくトピック外です。

于 2013-10-05T04:35:44.103 に答える