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

Posted

技术标签:

【中文标题】如何排除其中的目录和文件 - 重写【英文标题】:How to exclude directory and files inside it - rewrite 【发布时间】:2016-08-19 13:25:01 【问题描述】:

我有运行良好的 nginx 规则:

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

但是如果我访问 /myapp/ 下的某个目录,它会在 .php 上方加载具有自己的 index.php 的真实子目录,例如,如果我访问:

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

它从 good-file.php 加载东西,因为重写规则正在工作(它必须是)。

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

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

【问题讨论】:

你知道重写条件和重写规则吗?您需要告诉服务器,如果找不到目录,则应用规则! 【参考方案1】:

您可以使用try_files 指令在执行默认操作(例如重写规则)之前测试文件和目录是否存在。详情请见this document。

一个可能的实现是:

location /myapp 
    try_files $uri $uri/ @rewrite;

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

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

【讨论】:

以上是关于如何排除其中的目录和文件 - 重写的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 IIS URL 重写排除目录?

nGinx重写问题排除

从 RewriteRule 中排除文件夹/目录

如何从重写器中排除特定文件

.htaccess 重写失败,不确定如何排除故障

如何使编译器仅搜索包含目录中的特定文件并排除该特定目录中的其余文件[重复]