
本文针对 Nginx 配置中,当网站尝试重定向至主网站之外的路径(例如 `/signin` 或 `/signup`)时,出现 404 Not Found 错误的问题,提供详细的解决方案。核心在于配置 `location /` 块,使用 `try_files` 指令正确地将请求重定向到 `index.php`,从而解决单页应用或前端路由引起的页面找不到的问题。
在 Nginx 配置中,当网站内部链接或重定向指向非根目录下的资源时,可能会遇到 404 Not Found 错误。这通常发生在单页应用程序 (SPA) 或使用了前端路由的网站中,因为这些应用依赖于 index.php 来处理所有客户端路由。以下是一个解决此问题的常见方法,并提供详细的解释和注意事项。
问题分析
错误信息显示 Nginx 尝试直接查找 /signin 或 /signup 等文件或目录,但这些路径实际上并不存在于文件系统中。这是因为前端路由负责处理这些路径,而 Nginx 需要将这些请求重定向到 index.php,让前端路由来处理。
解决方案
解决此问题的关键在于配置 location / 块,使用 try_files 指令。try_files 指令会尝试按顺序查找指定的文件或目录,如果都找不到,则执行最后一个参数指定的动作。
在 server 块中添加或修改 location / 块,如下所示:
server { listen 80; listen [::]:80; listen 443; listen [::]:443; root /root/var/www/myforum/public; index index.php index.html index.htm index.nginx-debian.html; server_name www.example.com; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { try_files $uri $uri/ =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}
配置详解
location /: 这个块定义了如何处理所有请求。try_files $uri $uri/ /index.php?$query_string;: 这个指令尝试按顺序执行以下操作:$uri: 首先,它尝试查找与请求 URI 匹配的文件。例如,如果请求是 /signin,它会尝试查找 /root/var/www/myforum/public/signin。$uri/: 如果找不到文件,它会尝试查找与请求 URI 匹配的目录。例如,如果请求是 /signin,它会尝试查找 /root/var/www/myforum/public/signin/。/index.php?$query_string: 如果文件和目录都找不到,它会将请求重定向到 index.php,并将原始请求的查询字符串(如果有)附加到 URL。$query_string 变量包含 URL 中的查询字符串部分。
注意事项
路径检查: 确认 root 指令指定的路径是正确的,并且指向网站的根目录。 尤其要注意重复的 /root/ 路径,这可能导致 Nginx 无法找到正确的文件。
权限问题: 确保 Nginx 进程有权访问网站根目录及其中的所有文件。
PHP-FPM 配置: 检查 fastcgi_pass 指令指向的 PHP-FPM 套接字路径是否正确,并且 PHP-FPM 正在运行。
Nginx 重启: 在修改 Nginx 配置文件后,必须重新加载或重启 Nginx 才能使更改生效。可以使用以下命令:
sudo nginx -t # 检查配置文件语法是否正确sudo systemctl reload nginx # 重新加载 Nginx
缓存: 浏览器可能会缓存之前的 404 错误。清除浏览器缓存或使用无痕模式进行测试,以确保看到的是最新的结果。
总结
通过正确配置 location / 块,并使用 try_files 指令将所有未找到的文件或目录请求重定向到 index.php,可以有效地解决 Nginx 在处理单页应用或使用前端路由的网站时出现的 404 Not Found 错误。 请务必仔细检查配置文件的路径、权限和语法,并确保 PHP-FPM 正在运行。
以上就是解决 Nginx 重定向至主网站外时出现 404 Not Found 错误的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1335280.html
微信扫一扫
支付宝扫一扫