.htaccess 重定向至“404错误:在专用服务器中不起作用”诊断树[已关闭]

mcvgt66p  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(98)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

21小时前关门了。
Improve this question
这个问题花了我几个小时,我仍然没有找到解决办法
我想重定向404错误链接到我自己的错误页面
这是我写在我的.htaccess文件中的内容

Options -MultiViews

RewriteEngine on

ErrorDocument 404 /home/example.com/public_html/error.php

当我尝试输入一个错误链接时,它不会重定向到我自己的错误页面。它仍然显示原来的404错误页面。
对于带参数的url,我写了

$data = query("SELECT * FROM product WHERE url='$url' ");
if( mysqli_num_rows(data) === 0 )
{
   http_response_code(404);
   echo file_get_contents("error.php");
   exit;
}

但是在我写了那个之后,即使我输入了正确的链接和参数,它也什么都没有显示,当我输入了不正确的链接和参数,它也什么都没有显示。
有人有解决办法吗?谢谢!
我在我的本地主机和共享主机上试过这个东西,它工作得很好。

u4dcyp6a

u4dcyp6a1#

ErrorDocument 404 /home/example.com/public_html/error.php

ErrorDocument指令指定的路径应该是相对于文档根目录的URL路径,而不是绝对文件路径(看起来就是这样)。
(The将导致Apache默认的404响应,另外需要注意的是,404是由于尝试提供404文档来处理请求而导致的。)
所以,大概这样改吧:

ErrorDocument 404 /error.php

请注意,这与mod_rewrite无关,因此代码片段中的RewriteEngine指令是多余的。
参考编号:

  • https://httpd.apache.org/docs/2.4/mod/core.html#errordocument
$data = query("SELECT * FROM product WHERE url='$url' ");
if( mysqli_num_rows(data) === 0 )
{
   http_response_code(404);
   echo file_get_contents("error.php");
   exit;
}

这与Apache ErrorDocument指令无关-如果您暗示它是这样的话。触发错误文档的两种方法是不相关的。
但是您在哪里设置$url var呢?

iugsix8n

iugsix8n2#

我认为mysqli_num_rows(data)应该是mysqli_num_rows($data)
服务器正在阅读.htaccess文件吗?您使用的是什么提供程序?
请确保在服务器配置中允许ErrorDocument指令。某些服务器配置不允许使用此指令。您可以检查服务器的配置以查看是否允许使用此指令。
请检查.htaccess文件的权限。此文件必须可由Web服务器读取,才能应用重定向规则。
请确保错误页的路径正确。在.htaccess文件中,您将错误页的路径指定为/home/example.com/public_html/error.php。此路径相对于网站的根目录,因此请确保该文件存在于该位置,并且Web服务器可以读取该文件。
如果您仍然无法让重新导向运作,您可以尝试使用错误页面的绝对URL,而非相对路径。例如:

ErrorDocument 404 http://www.example.com/error.php

该页面可能被缓存了吗?Cloudflare etc.

相关问题