我想重写所有网址:
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;
}
有人能指出我正确的方向吗?
答案 0 :(得分: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
块用作在末尾尝试,这里你的重写网址来了,它们只是按原样使用。我们在这里使用$uri
因为$request_uri
值是不可变的。第一个位置阻止后参数$uri
的值将更改为/?locale=en
或/foo?locale=en
。它不包含查询字符串,因此我们必须使用变量$query_string
进行mannualy协助。
答案 1 :(得分:0)
location / {
rewrite "^/([a-z]{2})$" "/?_LOCALE_=$1" break;
rewrite "^/([a-z]{2})/(.*)$" "/$2?_LOCALE_=$1" break;
}