グラントの答えを「はい、それはほとんど期待どおりに機能します」に修正します。
具体的にmod_rewriteは、既存のクエリ文字列に関する の動作は驚くべきものです。例として、指定した URL を変換する次のルールを見てみましょう。
RewriteRule /contact /index.php?p=contact
これは に正しく書き換え/contactられ/index.php?p=contact、 からページ名にアクセスできるようになります$_GET['p']。ただし、ページ名以外のパラメーターを使用するスクリプトでこの手法を使用すると、少し複雑になります。この規則は にも変換/contact?person=Joeされ/index.php?p=contactます。パラメータが完全にperson=Joe消えます!これに対処するには 2 つの方法があります。
最も簡単な方法は[QSA]、ルールで ("query string append") フラグを使用することです。これにより、ルールで指定されたパラメーターの後/contact?person=Joeに元のクエリ文字列が配置され、次のように変換され/index.php?p=contact&person=Joeます。
RewriteRule /contact /index.php?p=contact [QSA]
ただし、これにより、p=パラメーターが上書きされる可能性があります。Visiting/contact?p=aboutは に書き換えられる/index.php?p=contact&p=aboutため$_GET['p']、スクリプトでは「contact」ではなく「about」が返されます。これを解決するには、QUERY_STRING代わりに次の変数を使用します。
RewriteRule /contact /index.php?%{QUERY_STRING}&p=contact
これにより、訪問者が URL をいじっているかどうかに関係なく、このルールを使用すると常に「連絡先」が返されること$_GET['p']が保証されます。:-)