gpt4 book ai didi

当我在 url 中使用已知文件扩展名时,nginx 404

转载 作者:行者123 更新时间:2023-12-02 21:43:59 24 4
gpt4 key购买 nike

每当我在 url 中放入已知的文件扩展名时,nginx 都会返回 404 Not Found

domain.com/myroute.foodomain.com/foo/myroute.foo 没问题,但是 domain.com/myroute.phpdomain.com/foo/myroute.php(或例如 .css、.js)返回 404 Not Found

我的 nginx 服务器配置:

server {
listen 80;
server_name domain.com;
root /var/www/path/public;

charset utf-8;
gzip on;

#access_log logs/host.access.log main;

location / {
index index.html index.php index.htm;
try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}

location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
access_log off;
}
}

为什么具有已知文件扩展名 (/myroute.php) 的网址不像其他网址那样转到我的 index.php 文件?

最佳答案

myroute.php 在您的服务器上不存在。

Nginx location 指令按此顺序检查

  1. Directives with the "=" prefix that match the query exactly (literal string). If found, searching stops.
  2. All remaining directives with conventional strings. If this match used the "^~" prefix, searching stops.
  3. Regular expressions, in the order they are defined in the configuration file.
  4. If #3 yielded a match, that result is used. Otherwise, the match from #2 is used

这意味着您的 myroute.php 请求由 ~\.php$ 位置 block 处理,根据您的 try_files 指令,这会导致 404 错误。

要解决这个问题,您需要使您的位置指令更加具体(例如~index\.php$),或者完全按照location/<中的方式尝试尝试文件。使用重写也可以解决您的问题。

编辑:

了解 nginx 选择位置 block 而不是其他位置 block 的顺序非常重要。查看更多信息 nginx wiki

关于你的问题,我认为最简单的解决方案是使用 try_files

    try_files $uri $uri/ /index.php?q=$uri&$args;

在您的 location ~\.php$ {location ~*\.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe| html|htm|txt|css|js) { block

  • 注意:不要忘记从 .php$ block 中删除旧的 try_files $uri =404

您的最终conf文件现在应该如下所示

server {
listen 80;
server_name domain.com;
root /var/www/path/public;

charset utf-8;
gzip on;

#access_log logs/host.access.log main;

location / {
index index.html index.php index.htm;
try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ~ \.php$ {
try_files $uri $uri/ /index.php?q=$uri&$args;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}

location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
try_files $uri $uri/ /index.php?q=$uri&$args;
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
access_log off;
}
}

关于当我在 url 中使用已知文件扩展名时,nginx 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19903330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com