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

问题描述 投票:0回答:1

我在

.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;
}

它在某些情况下有效,但并不完全按照预期工作。我的意思是,即使有

$_GET['id']
传递到 URL,
Null
也会是
?id=10

现在我试图理解

RewriteCond %{REQUEST_FILENAME} !-f
意味着能够将其转换为 Nginx 配置语法。知道如何将其转换为完全相同的 Nginx 吗?

apache nginx webserver
1个回答
0
投票

Web 服务器将 URL 转换为所请求文件的路径名。这存储在变量

REQUEST_FILENAME
中。您问题中的
RewriteCond
声明断言该文件存在。如果路径名不作为文件或目录存在,则请求将传递到
index.php

在 Nginx 中,这相当于

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

在 Apache 中,

QSA
中的
RewriteRule
标志可确保请求的查询字符串也附加到重写的 URL 中。您的
try_files
代码片段没有这样做!您正在将查询字符串替换
rt=$1

尝试:

try_files $uri $uri/ /index.php?rt=$1&$args;
© www.soinside.com 2019 - 2024. All rights reserved.