在使用 nginx 作为 Web 服务器的时候,如果 WordPress 设置了自定义链接格式,那么需要修改 nginx 的配置文件来处理链接重写,不然会出现 404 错误。要将配置文件中默认的规则:
location / {
try_files $uri $uri/ =404;
}Code language: Nginx (nginx)
修改为:
location / {
try_files $uri $uri/ /index.php?$args;
}Code language: Nginx (nginx)
解释
原来的配置文件中,nginx 首先查找是否有 $uri 这个文件,如果没有,再查找是否有 $uri/ 目录,如果仍然没有,就返回 404 Not Found。新的配置文件将最后 =404 部分进行了修改,如果没有找到 $uri 文件也没有找到 $uri/ 目录,就把这个请求重写到 index.php 去处理,同时带上 $args 参数。当请求到 index.php 时,PHP 就开始接手处理了。
为什么 index.php?$args 而不是 index.php?$uri 呢?这是因为 $uri 不会保留参数。那如果只传 $args,WordPress 又是怎么知道 URI 的呢?WordPress 可以通过 $_SERVER 变量获取到 URI。具体的解析处理比较复杂,但 PHP 程序是可以获取到 URI 的。所以,$args 一定要从 nginx 这里传过去,不能丢了,在这里把 $args 丢了 PHP 后面就获取不到了,而无论这里有没有显式地传 $uri,nginx 都会把 URI 传给 PHP。
发表回复