如何排除其中的目录和文件 - 重写


How to exclude directory and files inside it - rewrite

我有 Nginx 规则运行良好:

rewrite ^/myapp/(.*)/$ /myapp/good-file.php?param=$1;

但是,如果我访问/myapp/下的某个目录,它会加载到.php instad 真正的子目录上方,该子目录有自己的索引.php,例如,如果我访问:

http://www.example.com/myapp/sub-directory/

它从好文件加载内容.php因为重写规则正在工作(必须如此)。

如果我有重写的扭结,我如何排除/myapp/sub-directory/和其中的文件?

非常感谢您提供的信息和帮助!

执行默认操作(如重写规则)之前,可以使用 try_files 指令测试文件和目录是否存在。有关详细信息,请参阅此文档。

可能的实现方式是:

location /myapp {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    rewrite ^/myapp/(.*)/$ /myapp/good-file.php?param=$1 last;
}

上述假设您定义了rootindex,以及处理以 .php 结尾的文件的位置。