我已经为我的项目创建了一个404页面,但我似乎无法让它正常工作.当转到非URL时,我得到一个白色页面,上面写着"找不到文件".

www.example.com/wrongurl我收到找不到的白页文件

www.example.com/wrongurl.php我收到找不到的白页文件

www.example.com/wrongurl.html我得到了我的定制404页面

我已经通过我的Plesk面板try 了.htaccess文件和Apache&nginx设置

我的.htaccess文件

Options -MultiViews
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

# Append trailing slash if omitted (canonical redirect)
RewriteRule ^news$ /$0/ [R=301,L]

RewriteCond %{QUERY_STRING} (?:^|&)article_slug=([\w-]*)(?:$|&)
RewriteRule ^news\.php$ /news/%1 [R=301,L]

RewriteRule ^news/([\w-]*)$ /news.php?article_slug=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
ErrorDocument 404 /404.php

Apache & nginx Settings enter image description here

To troubleshoot the issue I have done the following

  1. 已判断是否正确处理了我的.htaccess文件.我添加了一个无效的行(Foo Bar),并试图访问一个不存在的页面.我得到的是内部服务器错误,而不是"找不到文件".

  2. 我已判断我的自定义错误页是否位于正确的 目录,并且具有正确的权限.我可以访问我的错误 直接在我的浏览器中输入URL,查看它是否 大把的.

  3. 我的apache 配置允许定制错误页面.

  4. 我try 使用ErrorDocument指令的绝对路径.我没有使用ErrorDocument 404/404.php这样的相对路径,而是try 使用ErrorDocument 404/var/www/html/404.php这样的绝对路径

在这方面的任何帮助都将不胜感激.

推荐答案

这很可能与服务器上安装PHP的方式有关.任何扩展名为.php的URL都可能被代理(使用Nginx?您在PHP可执行文件中同时提到了Nginx和apache),完全绕过了apache/.htaccess.

当您请求表单/wrongurl的URL时,最后一条规则是在内部将其重写为/wrongurl.php,并生成"找不到白页文件"响应.

通过在重写请求之前首先判断目标文件是否存在,至少可以防止/wrongurl被重写为/wrongurl.php并绕过定制的404.换句话说,将最后一条规则更改为:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

对此:

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^.]+)$ $1.php [L]

因此,当请求的URL没有映射到文件时,而不是重写请求.仅当存在对应的.php文件时才重写请求.

不需要对正则表达式字符类中的文字点进行反斜杠转义.也不需要在那条规则上有NC的旗帜.

Php相关问答推荐

通过激活模板在数据库中创建表

我如何知道BaseController中当前运行的是哪个控制器?

WooCommerce产品按特定元数据的自定义数字排序选项

使用正则表达式搜索两个子字符串(没有重叠/共享字符)

在WooCommerce管理中 for each 运输方法设置添加自定义字段

这是在可召回的背景下吗?

模式 bootstrap 未显示

表单提交返回空白页

添加不存在的订单元数据以扩展WooCommerce管理订单搜索

如何在PHP中根据会话将用户重定向到不同的页面?

在 WooCommerce 中应用优惠券时显示购物车商品折扣金额

在php中计算两个没有假期的日期之间的小时差

如何在 PHP laravel 中将图像的透明背景转换为白色?

从插件更改主题功能,function_exists 不起作用

如何在 php 中获取正确的时间

正则表达式抓取递归括号的内容

PHP 自动函数参数和变量

来自命令行的 PHP 没有给出正确的结果

使用 v-for 的存储链接中的 Img src 在 Laravel vuejs 中不起作用

升级到 PHP 8.2:ksort 和 krsort 更改