8

動的なサイトを作成しました。情報(エリア/カテゴリ/サブカテゴリ)はhtaccessを通過して素敵なURLを取得します。たとえば、ユーザーがカテゴリに飛び込むと、次のように流れます。

/parts/hard-drives

/parts/hard-drives/hard-drives-sas

それ以降、htaccessでこれを拡張して、より多くのアイテムを渡し、phpで変数を取得できるようにする方法があるかどうか疑問に思いました。

/parts/hard-drives/hard-drives-sas/?manufacturer=dell&price=20

htaccessファイルの現在の行は次のとおりです。

RewriteRule ^parts/([^/\.]+)/([^/\.]+)/?$ parts.php?p=$1&f=$2 [L]
RewriteRule ^parts/([^/\.]+)/?$ parts.php?p=$1 [L]
RewriteRule ^parts parts.php [L]

最初の行が関連し/products/hard-drives/hard-drives-sas、2番目の行が関連し/products/hard-drives、次に単にパーツページが表示されます/parts

うまくいけば、それは理にかなっています!

ありがとう。

4

2 に答える 2

14

QSAflag を使用して GET 変数を渡します。

RewriteRule ^parts/([^/\.]+)/([^/\.]+)/?$ parts.php?p=$1&f=$2 [L,QSA]
RewriteRule ^parts/([^/\.]+)/?$ parts.php?p=$1 [L,QSA]
RewriteRule ^parts parts.php [L,QSA]

ドキュメント:

置換 URI にクエリ文字列が含まれている場合、RewriteRule の既定の動作では、既存のクエリ文字列が破棄され、新しく生成されたクエリ文字列に置き換えられます。[QSA] フラグを使用すると、クエリ文字列が結合されます。

次のルールを検討してください。

RewriteRule /pages/(.+) /page.php?page=$1 [QSA]

[QSA] フラグを使用すると、/pages/123?one=two のリクエストは /page.php?page=123&one=two にマップされます。[QSA] フラグがないと、同じリクエストが /page.php?page=123 にマップされます。つまり、既存のクエリ文字列は破棄されます。

http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_qsa

于 2013-01-17T16:12:00.140 に答える
0

サーバー上の .htaccess を編集して、このルーティングの概念を適応させるのは本当に大変だと思います。CodeIgniter、CakePHP などの PHP フレームワークを確認することをお勧めします。それらはすべて、必要なルーティング メカニズムを既に準備しています。そして、それは非常に理解しやすいです。.htaccess を編集すると、この種のルーティング要件が大量に必要な場合に追加するルールの数が明らかに不利になります。

于 2013-01-17T16:16:59.173 に答える