gpt4 book ai didi

nginx - 在 nginx 位置 block 中使用 try_files 和 rewrite

转载 作者:行者123 更新时间:2023-12-01 13:41:02 25 4
gpt4 key购买 nike

我已经在 nginx 中广泛使用 rewrite 来执行这类事情:

/photos/123344               ->    /photos/photos.php?id=123344
/photos/london-2016 -> /photos/photo-shoot.php?name=london-2016

目前我没有其他(非动态)页面的规则。例如

/photos/shoot-register.php   ->    /photos/shoot-register.php

我想成为什么样的人

/photos/shoot-register.php   ->    /photos/shoot-register

但没有为每个 .php 文件指定单独的 rewrite 规则。

看来 try_files 是这里的正确指令:

location ~ ^/photos {
try_files $uri $uri.php?$args;
rewrite ^/photos/([0-9]+)(/?)$ /photos/photo.php?id=$1;
rewrite ^/photos/([^/\.]+)(/?)$ /photos/photo-shoot.php?name=$1;
}

但这不起作用,除非我删除这两个重写行。

我假设这意味着执行不会在尝试文件后停止?它找到“shoot-register.php”但随后继续执行并以 /photos/photo-shoot.php?name=shoot-register.php?

结尾

如何让它在 try_files 成功找到匹配后停止?

谢谢

最佳答案

如果您将重写移动到单独的命名位置,然后更改您的 try_file 指令以尝试文件,然后是 php 文件,然后指向新位置会怎样?

location ~ ^/photos {
try_files $uri $uri.php?$args @rewrites;
}

location @rewrites {
rewrite ^/photos/([0-9]+)(/?)$ /photos/photo.php?id=$1;
rewrite ^/photos/([^/\.]+)(/?)$ /photos/photo-shoot.php?name=$1;
}

关于nginx - 在 nginx 位置 block 中使用 try_files 和 rewrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40264617/

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