0

我想重写所有网址,例如:

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 与不同的模式匹配。
如果第一个模式匹配,则采用第二个示例。
如果第二个模式匹配,则采用您的第一个示例。

第二个location在最后尝试它,在这里你重写的 url 来了,并按原样使用。我们在$uri这里是因为$request_uri价值是不可变的。第一个位置块之后的参数值$uri将更改为/?locale=enor /foo?locale=en。它不包含查询字符串,因此我们必须使用 variable 手动分配它$query_string

于 2013-01-29T09:19:35.663 回答