0

すべての URL を次のように書き換えたいと思います。

http://example.com/en/foo
http://example.com/en

に:

http://example.com/foo?locale=en
http://example.com?locale=en

私はこのようなことを試しました(成功せずに):

location ~ ^/([a-z]2)?/(.*)$ {
    rewrite ^([a-z]2)/(.*) /$2?locale=$1;
} 

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

0
location / {
    rewrite "^/([a-z]{2})$" "/?_LOCALE_=$1" break;
    rewrite "^/([a-z]{2})/(.*)$" "/$2?_LOCALE_=$1" break;
}
于 2013-01-30T15:41:51.930 に答える
0

これを試して:

location ~ ^/([a-z]{2})(/.*){0,1} {
   rewrite ^/[a-z]{2}$ /?locale=$1 break;
   rewrite ^/[a-z]{2}/(.*)$ /$2?locale=$1 break;

location / {
    # I don't know what happend to your request after rewrite above
    # so I assume that you proxy pass it
    proxy_pass http://my.php.server/$uri?$query_string =404;
}

locationここで、両方の例が最初のパターンに一致します。このブロック内で、要求された URL がさまざまなパターンと照合されます。
最初のパターンが一致した場合、2 番目の例が採用されます。
2 番目のパターンが一致する場合、最初の例が使用されます。

2番目のlocationブロックは最後に試してみると機能し、ここで書き換えられたURLが来て、そのまま使用されます。値は不変$uriであるため、ここでur を使用しています。$request_uri最初のロケーション ブロックの後の param の値は、または$uriに変更されます。クエリ文字列が含まれていないため、変数を使用して手動で割り当てる必要があります。/?locale=en/foo?locale=en$query_string

于 2013-01-29T09:19:35.663 に答える