我正在尝试重写域以包含语言路径但没有斜杠。
所以
www.example.com => www.example.com/en
www.example.com/page/ => www.example.com/en/page
www.example.com/page => www.example.com/en/page
我目前正在使用此配置,但它无法按预期工作。
server {
listen 80;
server_name www.example.com;
root /var/www/example.com/public;
rewrite ^/(.*)/$ /$1 permanent;
index index.php index.html;
location = / {
return 301 http://www.example.com/en$request_uri;
}
}
主要是,
www.example.com => www.example.com/en/ => www.example.com/en
www.example.com/page => www.example.com/page
此代码也对某些http_post请求造成严重破坏。
答案 0 :(得分:0)
如果是POST,重定向将降级为GET(这是正常行为)。 307响应可用于使用新URI重复POST。有关详情,请参阅this page。
在这种情况下,您需要重写配置以使用return 307
语句。您可以使用正则表达式位置块来捕获URI而不使用其尾随/
。有关详情,请参阅this document。
识别不以/en
开头的URI的一种方法是使用location ^~ /en
块来处理做以/en
开头的所有URI,并使用正则表达式位置块捕获其他所有内容。
例如:
location = / {
return 307 /en;
}
location ~ ^(/.*?)/?$ {
return 307 /en$1;
}
location ^~ /en {
...
}