gpt4 book ai didi

regex - nginx 重写排除

转载 作者:行者123 更新时间:2023-12-01 09:27:07 27 4
gpt4 key购买 nike

我有一个网站最近更改了其页面结构以添加多种语言的功能(/en/ 用于英语,/fr/ 用于法语)。我在 my server {} block 中有以下重写规则:

    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(有效,但看起来很老套)
  • 网站的根应该重定向到/en/(有效)
  • 格式为 /en/abc 的链接应作为 ?lang=$1&page=$2 发送到 index.php(这包括/en/abc/123 其中 abc/123$2en$1). $2可以任意长度,比如abc/123/456

我的“似乎”工作正常,但子页面 abc/123 似乎将 $1 设置为 en/abc$2123,这是不需要的,会导致 404 错误,因为脚本找不到页面 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;

我已将 .* 替换为 [^\/]*

关于regex - nginx 重写排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com