我有一个网站最近更改了其网页结构,以添加多种语言的功能(英语为/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 /en/abc
(有效,但似乎是hackish)/en/
(有效)/en/abc
格式的链接应以index.php
的形式发送至?lang=$1&page=$2
(其中包括/en/abc/123
abc/123
为$2
和{{} 1}}是en
)。 $1
可以有任意长度,例如$2
我的“似乎”工作得很好,但子网页abc/123/456
似乎将abc/123
设置为$1
而en/abc
设置为$2
t期望并导致404错误,因为脚本找不到页面123
。提前感谢您的任何答案!
答案 0 :(得分:2)
试试这个
try_files $uri $uri/ @abc;
location @abc {
if ($uri !~ "^/([^\/]*)\/([^\/]*)$") {
rewrite ^/(.*)$ /en/$1 permanent;
}
rewrite ^/([^\/]*)\/([^\/]*)$ /index.php?lang=$1&page=$2;
}
rewrite ^/$ /en/$1 permanent;
我已将.*
替换为[^\/]*
。