2016-07-16 1 views
0

私はそうのようなURLの束を持っていた:NGINXの1文字を書き換える最善の方法は何ですか?

http://domain.com/l/key-a=value-a/key-b=value-b.html

彼らは、Googleでインデックス化されたが、以来-兆候に=兆候から我々のシステムに変更されているので、私は1つのような要求をリダイレクトしたいと思います

http://domain.com/l/key-a-value-a/key-b-value-b.html

注:に上記一つ以上のキー値PARAMセットが存在する可能性が、上記は一例です。

NGINXでこれを行うにはどうすればよいですか?

+0

Nginxでダッシュするにはアンダースコアを置き換える方法(http://stackoverflow.com/questions/15912191/how-to-replace-underscore-to-dash-with-nginx) –

+0

類似した、唯一のものそれは "="記号であり、他の場合に使用できるという点で問題があります。パラメタの前に "/ l /"パスがある場合にのみ書き直す必要があります。どうすればいいのか知っていますか? – Nathan

+0

パスにはキーと値のセットのみが含まれていますか?セットの最大数は何ですか? 'キー'はキーワードか単なるプレースホルダですか? –

答えて

0

Iは、次のブロックを使用してこの問題を解決することができた:

location ~ /l/(.*)=(.*) { 
    rewrite ^([^=]*)=(.*)$ $scheme://$host$1-$2; 
    return 301; 
    } 

これは、複数のキーと値のペアのセグメントがパスである場合でも動作するように見えた、EX:

domain.com/L /カラー=赤/サイズ=大/形状=ラウンド

UPDATE:

Iは、その場合にはここでmultip発見le-key-valueセグメントが存在し、301回のリダイレクトがあったため、Googleはこれを好まなかった。

だから私は一緒に行くことになった:

location ~ /l/(.*)=(.*) { 
    rewrite ^([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=(.*)$ $scheme://$host$1-$2-$3-$4-$5-$6-$7-$8-$9 permanent; 
    rewrite ^([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=(.*)$ $scheme://$host$1-$2-$3-$4-$5-$6-$7-$8 permanent; 
    rewrite ^([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=(.*)$ $scheme://$host$1-$2-$3-$4-$5-$6-$7 permanent; 
    rewrite ^([^=]*)=([^=]*)=([^=]*)=([^=]*)=([^=]*)=(.*)$ $scheme://$host$1-$2-$3-$4-$5-$6 permanent; 
    rewrite ^([^=]*)=([^=]*)=([^=]*)=([^=]*)=(.*)$ $scheme://$host$1-$2-$3-$4-$5 permanent; 
    rewrite ^([^=]*)=([^=]*)=([^=]*)=(.*)$ $scheme://$host$1-$2-$3-$4 permanent; 
    rewrite ^([^=]*)=([^=]*)=(.*)$ $scheme://$host$1-$2-$3 permanent; 
    rewrite ^([^=]*)=(.*)$ $scheme://$host$1-$2 permanent; 
    } 

2S例(How to replace underscore to dash with Nginx)の減少の力が私のために動作しませんでした。

関連する問題