为什么我需要重定向nginx中的$args到index.php


Why do I need to redirect $args in nginx to index.php?

许多PHP框架建议将此添加到nginx:

location / {
    try_files $uri /index.php$is_args$args;
}

对所有HTTP请求执行index.php

为什么我需要$is_args$args 我认为$args已经在HTTP GET请求中了。那么为什么nginx需要以这种方式传递给index。php呢?

这取决于谁写的index.phpnginx向PHP发送了大量的参数,其中通常有QUERY_STRING和REQUEST_URI。

如果程序员访问$_SERVER["QUERY_STRING"],他们将收到try_files语句中附加到/index.php末尾的任何内容。

如果程序员访问$_SERVER["REQUEST_URI"],他们将收到原始URI和原始查询字符串,并且在try_files语句中添加到/index.php末尾的任何内容都不会影响。

我托管的两个应用程序(WordPress和MediaWiki)显然使用后者,因为我没有将$is_args$args附加到/index.php,它都工作得很好。