提问人:Martin AJ 提问时间:8/18/2023 更新时间:8/18/2023 访问量:31
RewriteCond %{REQUEST_FILENAME} !-f 是什么意思?
What does RewriteCond %{REQUEST_FILENAME} !-f mean?
问:
我在文件中有以下规则:.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
答:
1赞
Richard Smith
8/18/2023
#1
Web 服务器将 URL 转换为所请求文件的路径名。它存储在变量 中。您的问题中的陈述断言此文件存在。如果路径名不作为文件或目录存在,则请求将传递给 。REQUEST_FILENAME
RewriteCond
index.php
在 Nginx 中,这相当于 - 术语测试文件是否存在,术语测试目录是否存在,最后一个参数是如果两个测试都失败时采取的操作。try_files $uri $uri/ /index.php;
$uri
$uri/
在 Apache 中,the 中的标志可确保请求的查询字符串也附加到重写的 URL 中。您的代码段没有这样做!要将查询字符串替换为 。QSA
RewriteRule
try_files
rt=$1
尝试:
try_files $uri $uri/ /index.php?rt=$1&$args;
评论
0赞
Martin AJ
8/18/2023
感谢您的精彩解释,我几乎理解了 Apache 和 Nginx 在这种情况下是如何工作的。
评论