我有一个网站,最近改变了页面结构,添加了多种语言的function( /en/
英文, /fr/
法文)。 我在my server {}
块中有以下重写规则:
try_files $uri $uri/ @abc; location @abc { if ($uri !~ "^/(.*)\/(.*)$") { rewrite ^/(.*)$ /en/$1 permanent; } rewrite ^/(.*)\/(.*)$ /index.php?lang=$1&page=$2; } rewrite ^/$ /en/$1 permanent;
这有点乱,但我似乎无法完成我所需要的:
/abc
应该301'd到/en/abc
(工作,但似乎hackish) /en/
(works) /en/abc/123
,其中abc/123
为$2
, en
为$1
)时,应将/en/abc
格式的链接发送到index.php
作为?lang=$1&page=$2
。 $2
可以有任何长度,如abc/123/456
我似乎工作得很好,但子页面abc/123
似乎将$1
设置$1
en/abc
和$2
到123
这是不希望的,并导致404错误,因为脚本无法find页面123
。 预先感谢任何答案!
尝试这个
try_files $uri $uri/ @abc; location @abc { if ($uri !~ "^/([^\/]*)\/([^\/]*)$") { rewrite ^/(.*)$ /en/$1 permanent; } rewrite ^/([^\/]*)\/([^\/]*)$ /index.php?lang=$1&page=$2; } rewrite ^/$ /en/$1 permanent;
我用[^\/]*
替换.*
[^\/]*
。