2016-04-14 19 views
1

ここでは私のnginxの書き換えルールはクエリ文字列引数を持つnginxの書き換えルールに

rewrite ^(.*)$ http://www.destination.com/main.php?utm_source=xxx&utm_medium=yyy&utm_campaign=zzz permanent; 

すべては、クエリの引数があるときを除き、これまでの作品です。

これは永続的な301リダイレクトであり、クエリ文字列がある場合は大文字と小文字を設定する必要があります。utm追跡クエリの前に追加されます。

クエリ文字列を使わずに書き直しをしながらこれを行うにはどうすればよいですか?

例えば、

http://www.from.com/?test=ABC

http://www.destination.com/main.php?test=ABC&utm_source=xxx&utm_medium=yyy&utm_campaign=zzz

代わりの

http://www.destination.com/main.php?utm_source=xxx&utm_medium=yyy&utm_campaign=zzz&test=ABC

答えて

2

になり、手動でクエリの引数を挿入することができますが、&セパレータが必要とされているかどうかを計算するmapを使用する必要があります。

maphttpブロックに配置する必要があります。

map $is_args $separator { 
    default ""; 
    "?"  "&"; 
} 

rewriteは次のようになります:

rewrite ^(.*)$ /some/url.php?$args${separator}q=$1? permanent; 

詳細はthis documentを参照してください。

+0

完璧に動作します。 ''? ''と ''& "'はどこで '' map'ブロックを作りましょうか? 'map'はここに一定の条件を適用していますか? – KDX

+0

@KDX $ is_args変数が "?"に設定されています。クエリ文字列が存在する場合。空でない限り、既存のクエリ文字列($ args)に引数を結合するには、その文字列を "&"にマップする必要があります。 –

+0

クエリ文字列がない場合、 '$ separator'は' ''になりますか?クエリ文字列がある場合、 '$ separator'は' '&" 'になります。私は正しく理解していますか? – KDX

関連する問題