Nginx 仅加载 index php

Nginx 仅加载 index php

我希望 Nginx 在每个进入的 URL 上仅加载 index.php

example.com/urlb?id=1 example.com/urlc?id=2 example.com/urld?id=3 我的 /etc/nginx/sites-available/default 如下所示 -

server {
    listen 80;
    listen [::]:80;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name html;



    location ~ \$ {
        try_files /index.php$is_args$args;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix://var/run/php/php7.3-fpm.sock;
    }
}

我希望上述所有 URL 或功能中的任何 URL 始终加载 index.php

答案1

  1. 您使用的位置将仅匹配包含符号的请求$,这绝对不是您想要的。
  2. 使用try_files指令必须指定至少一个要检查的文件/文件夹。指定无法通过存在性检查的文件的最简单方法是指定dev/null

所以你的位置应该是这样的

    location / {
        try_files /dev/null /index.php$is_args$args;
        include fastcgi.conf;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix://var/run/php/php7.3-fpm.sock;
    }

或者,没有try_files指令

    location / {
        include fastcgi.conf;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_pass unix://var/run/php/php7.3-fpm.sock;
    }

答案2

请尝试以下location块:

location / {
    try_files /index.php$is_args$args =404;

    include snippets/fastcgi-php.conf;
    fastcgi_pass unix://var/run/php/php7.3-fpm.sock;
}

try_files这满足了至少需要两个参数的要求。是当不存在时返回响应=404的后备。404 Not Foundindex.php

相关内容