RewriteCond %{REQUEST_FILENAME} !-f 是什么意思?

What does RewriteCond %{REQUEST_FILENAME} !-f mean?

提问人:Martin AJ 提问时间:8/18/2023 更新时间:8/18/2023 访问量:31

问:

我在文件中有以下规则:.htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\s\S]*)$ index.php?rt=$1 [L,B,QSA]

现在我已经切换到 Nginx,并将其转换为:(使用在线网站)

location ~ "^/([\s\S]*)$" {
    try_files $uri $uri/ /index.php?rt=$1;
}

它在某些情况下有效,但不能完全按预期工作。我的意思是,即使有传递给 URL。$_GET['id']Null?id=10

现在我正在尝试了解能够将其转换为 Nginx 配置语法意味着什么。知道如何将其转换为完全相同的 Nginx?RewriteCond %{REQUEST_FILENAME} !-f

Apache Nginx Web 服务器

评论


答:

1赞 Richard Smith 8/18/2023 #1

Web 服务器将 URL 转换为所请求文件的路径名。它存储在变量 中。您的问题中的陈述断言此文件存在。如果路径名不作为文件或目录存在,则请求将传递给 。REQUEST_FILENAMERewriteCondindex.php

在 Nginx 中,这相当于 - 术语测试文件是否存在,术语测试目录是否存在,最后一个参数是如果两个测试都失败时采取的操作。try_files $uri $uri/ /index.php;$uri$uri/

在 Apache 中,the 中的标志可确保请求的查询字符串也附加到重写的 URL 中。您的代码段没有这样做!要将查询字符串替换为 。QSARewriteRuletry_filesrt=$1

尝试:

try_files $uri $uri/ /index.php?rt=$1&$args;

评论

0赞 Martin AJ 8/18/2023
感谢您的精彩解释,我几乎理解了 Apache 和 Nginx 在这种情况下是如何工作的。