我想重写所有网址,例如:
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;
}
谁能指出我正确的方向?
我想重写所有网址,例如:
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;
}
谁能指出我正确的方向?
location / {
rewrite "^/([a-z]{2})$" "/?_LOCALE_=$1" break;
rewrite "^/([a-z]{2})/(.*)$" "/$2?_LOCALE_=$1" break;
}
尝试这个:
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=en
or /foo?locale=en
。它不包含查询字符串,因此我们必须使用 variable 手动分配它$query_string
。