0

他のRewriteRulesは機能するので、それらを置き換えて、これを最初に配置しました。意図的に操作すると500エラーが返されるため、構成ではなく構文が間違っていると確信しています。

以前は次のようなURLを使用していたサイトを再設計しました。

/product_view.asp?product_id=123&images_id=456

私の新しいサイトには次のようなURLがあります。

/shop/product/123

(2つ123は同じデータベースを保持しているのと同じです)

私のRewriteRuleは次のとおりです。

RewriteRule ^product_view.asp\?product_id=([0-9]+).*$ /shop/product/$1 [R=301,L]

しかし、何も起こりません–エラーも、500も、何もありません。

私は何を間違えましたか?

4

1 に答える 1

2

RewriteRuleは含まれないパスのみを参照しますQUERY_STRING。で検索product_idします。QUERY_STRINGRewriteCond

RewriteCond %{QUERY_STRING} (?:^|&)product_id=([0-9]+)
RewriteRule ^product_view\.asp$ /shop/product/%1? [R=301,L]

のグループ化されたパーツは、RewriteCondとして参照できます%1。で使用できますRewriteRule

の置換部分の?最後に を配置すると、が破棄されます。( Apache のバージョンが 2.4 以降の場合は、代わりに flag を使用できます。) 常に必要というわけではありませんが、.RewriteRuleQUERY_STRINGQSD/shop/product/123?product_id=123&images_id=456

詳細についてはmod_rewrite ドキュメントを確認してください。

于 2012-12-14T16:41:13.827 に答える