我希望 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
- 您使用的位置将仅匹配包含符号的请求
$
,这绝对不是您想要的。 - 使用
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 Found
index.php