4

たとえば、仮想ディレクトリをパラメーターに変換するために機能する次の.htaccess 書き換えルールがあります。

www.example.com/usa/ny/nycは PHP によって として解釈されますwww.example.com/index.php?path=usa/ny/nyc

私が理解できないように見えるregexのは、仮想ディレクトリ自体のパラメーターを処理するために以下を変更する方法です。たとえば、私は欲しい:

www.example.com/usa/ny/nyc/?display=off&settings=nonePHP からは として認識されwww.example.com/index.php?path=usa/ny/nyc&param=display:off,settings:noneます。

さらに厄介なのは、パラメーターが常に上記の例で使用した 2 つのオプションであるとは限らず、動的に変化することです。これを達成する方法についてのアイデアや提案はありますか?

RewriteRule ^/?([a-zA-Z_\-/]+)$ index.php?path=$1 [L]  
4

1 に答える 1

2

クエリ文字列を変更せずに渡したい場合は、次のように[QSA](クエリ文字列の追加)オプションを使用できます。

RewriteRule /(.+)$ /index.php?path=$1 [L,QSA]

QSAオプションのドキュメントはここにあります。ドキュメントから:

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

したがって、PHPスクリプトは_$_GET、他の変更を行う必要がなく、すべてのパラメーターを標準パラメーターとして認識します。

結果を一般的なパス要素のように扱いたい場合は、次を使用できます。

RewriteRule /(.+)$ /index.php/$1 [L,QSA]

上記の場合、クエリ文字列は引き続き追加されますが、を使用してパスを明示的に処理する必要があります$_SERVER['PATH_INFO']

于 2012-11-03T23:30:46.413 に答える