0

いくつかの特定のタスクを含む外部リダイレクトを生成しようとしています。

  1. URL に特定のクエリ文字列値が見つかった場合は、リダイレクトします。
  2. リダイレクトされた場合は、クエリ文字列パラメーター名の 1 つを置き換えますが、その値は置き換えません。
  3. #1がfalseの場合、書き換えを無視して続行します

例: http://foobar.com/?a=123&b=456&c=blahという URL があります。

まず、パラメータ c = の場合、 http://barfoo.com/blahにリダイレクトします。

次に、パラメーターで置き換えax、最終的な URL がhttp://barfoo.com/?x=123&b=456&c=blahになるようにします。

以下は、 http://mod-rewrite-cheatsheet.com/mod_rewrite の隠し機能を調査した後の私の最良の推測です。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.foobar\.com$ [NC]
RewriteCond %{QUERY_STRING} ^a=(.*)&b=(.*)&c=blah$ [NC]
RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,QSA,R=301]

ただし、URL は置換ではなく、クエリ文字列を追加しています。

にリダイレクトされますhttp://barfoo.com/?x=123&b=456&c=blah&a=123&b=456&c=blah

4

1 に答える 1

0

額を叩く

QSAフラグから削除すると、問題が解決しました。QSA「既存のクエリ文字列を現在の書き換えルールに追加する」ことを意味します。追加する新しいクエリ文字列パラメーターは無視されます。

書き換えルール自体にクエリ文字列パラメーターが存在する必要があると思いました。

RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,R=301]

于 2015-12-10T18:57:44.813 に答える