我在文件中有以下规则.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']
是Null
即使?id=10
传递到 URL 也会如此。
现在我试图理解RewriteCond %{REQUEST_FILENAME} !-f
将其转换为 Nginx 配置语法意味着什么。知道如何将其转换为完全相同的 Nginx 吗?
Web 服务器将 URL 转换为所请求文件的路径名。这存储在变量中
REQUEST_FILENAME
。您问题中的陈述RewriteCond
断言该文件存在。如果路径名不作为文件或目录存在,则请求将传递到index.php
.在 Nginx 中,这相当于
try_files $uri $uri/ /index.php;
-$uri
术语测试文件是否存在,$uri/
术语测试目录是否存在,最后一个参数是如果两个测试都失败则采取的操作。在 Apache 中,
QSA
中的标志RewriteRule
可确保请求的查询字符串也附加到重写的 URL 中。你的try_files
片段没有这样做!您正在将查询字符串替换rt=$1
为.尝试: