0

私はこの RewriteRule を持っています:

RewriteRule ^wiki/search[.php]*?q=(.*)$ /wiki/search/$1 [R]

/wiki/search?q=search_query の形式を /wiki/search/search_query に書き換えようとして、これを次のように書き換えます。

RewriteRule ^wiki/search/(.*)$ /wikisearch.php?id=$1 [L]

ただし、最初のルールにある限り、?q=単に機能せず、代わりに 404 エラーが発生します。:(
これはなぜですか?書き換えルールなどで GET パラメータを使用できないのですか?

4

1 に答える 1

1

docsで読むことができるようRewriteRuleに、クエリ文字列を含まず、「URL-path」にのみ適用されます。

最初の RewriteRule では、リクエストの (% デコードされた) URL パス (コンテキストによってはファイル パス) と照合されます。後続のパターンは、最後に一致した RewriteRule の出力と照合されます。

クエリ文字列で照合するには、 を使用し、後でand ...を使用RewriteCondして、次の書き換えルールで一致とグループを参照します。%0%1%9

RewriteCond %{QUERY_STRING} \bq=([^&]+)
RewriteRule ^wiki/search(?:\.php)?$ /wiki/search/%1

一方で、あなたがしていることはかなり見苦しいので、そのような無用な外部リダイレクト ( [R]) を避けることをお勧めします。外部リダイレクトなしで目的の URL に書き換えるか、アプリケーション/スクリプトですべてのクエリ文字列の変更を適切に処理します。

于 2013-06-09T08:02:05.460 に答える