HTACCESS 404 错误无法正常工作

2024-07-01

问题:

在此服务器上找不到请求的 URL /welcome.php。
此外,尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

事情是这样的:

  • 当我访问 www.mysite.com/page 时它工作正常,如果我访问 mysite.com/404 也能正常工作

  • 但是,当我拼写错误并访问 www.mysite.com/pag (而不是“page”)时,我会收到上述错误。

我还在我的索引文件 (welcome.php) 中使用 PHP 来确定$_GET值并动态显示正确的页面。可能和这个有关系。

测试地点:http://mrobertsdesign.ca/home http://mrobertsdesign.ca/home(您可以在以下位置看到错误http://mrobertsdesign.ca/hom http://mrobertsdesign.ca/hom)

我到处寻找答案,在过去的 12 个小时里一直在研究这个问题,只是想找出为什么它不起作用。最重要的是,我不确定是什么导致了这个问题......感谢所有帮助!

有任何想法吗??


我的 .htaccess 文件是:

<Files .htaccess>
order allow,deny
deny from all
</Files>

ErrorDocument 404 http://mrobertsdesign.ca/404

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteCond %{HTTP_HOST} ^www\.mrobertsdesign\.ca [NC]
RewriteRule ^(.*)$ http://mrobertsdesign.ca/$1 [R=301]

RewriteRule ^([a-zA-Z0-9]+)/?$ welcome.php?page=$1 [NC]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ welcome.php?category=$1&page=$2 [NC]

DirectoryIndex comingsoon.php welcome.php

我的索引文件是(welcome.php):

<?php 

    $web_url = "http://mrobertsdesign.ca";

    $path = '';
    $page = $_GET['page'];
    $pages = array('home','about','work','contact','404');

    if ((basename($_SERVER['__FILE__'])) == 'welcome.php'){
        if (!empty($page)) {
            $url = '/' . $page;
        } else {
            $page = 'home';
            $url = '/' . $page;
        }
        header('Location: ' . $url, true, 301); exit();
    }
    if (!empty($page)) {
        if(in_array($page,$pages)) {
            if (!empty($category)) {
                $path = $category . '/' . $category . '_' . $page;
            } else {
                $path = 'content_' . $page;
            }
        }else {
            $page = '404';
            $url = '/' . $page;
            header('Location: ' . $url, true, 404); exit();
        }
    }
    else {
        $page = 'home';
        $path = 'content_' . $page;
    }

              if($page == 'home'){
                    // stuff for home here
        }else if($page == 'about'){ 
                    $page_title = "About"; 
        }else if($page == 'work'){ 
                    $page_title = "Work"; 
        }else if($page == 'contact'){ 
                    $page_title = "Contact"; 
        }else if($page == '404'){ 
                    $page_title = "Oops! (404)"; 
        }
        $page_class = 'page-' . $page;

    // Page Start

    include('includes/header.php');
    include('includes/' . $path . '.php');
    include('includes/footer.php');
?>

改变时:

    else {
        $page = 'home';
        $url = '/' . $page;
    }

对此:

    else {
        http_response_code(404); exit; 
    }

对于welcome.php 和 404 错误页面,错误均更改为内部服务器错误:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。
请联系服务器管理员,[电子邮件受保护] /cdn-cgi/l/email-protection并告知他们错误发生的时间,以及您可能执行的任何操作可能导致错误。
有关此错误的更多信息可在服务器错误日志中找到。
此外,尝试使用 ErrorDocument 处理请求时遇到 500 Internal Server Error 错误。


我观察到的更多信息:

  • 我的 .htaccess 文件正在重写值,例如/welcome.php?page=about to /about and /welcome.php?category=about&page=me to /about/me,所以如果我去/about它将转到“关于”页面(并且现在无论如何都没有 /about/me 或任何第二级页面)。

  • 如果我拼写错误并转到/abou or /anything-here or /anything-here/anything-here-too它显示错误,指出找不到我的索引 (welcome.php) 和 404 错误页面。

  • 但是,如果我去/welcome.php?page=abo(代替about,任何不是真实页面的内容)它显示我的 404 错误页面。

  • 如果我去/any-page.fileextention(例如 /about.php - 实际上并不存在)它会显示 404 错误页面,如果我转到/one/two/three它还会显示 404 错误页面。

  • 如果你去/welcome.php(我的索引页)它将显示正确的页面,如果您取出文件扩展名的一部分,例如/welcome.ph它将显示 404 错误页面。如果您转到 404 错误页面,它也会正确显示在/404.

当文件被视为文件系统时(例如,/about相比/about.php or /welcome.php?page=about or /welcome.php?page=abo)最多两个级别(例如/about and /about/me).

In /welcome.php?page=mypage,地址实际上已经指向/welcome.php, 但在/about该地址只是一个文件系统,.htaccess 文件应该将其解释为$_GET对我的价值/welcome.php页面,当$_GETvalue 是一个真实值,但是当它不是时,它会作为错误返回并丢弃所有内容。

此时的问题甚至不是错误文档,而是找不到/welcome.php and /404当地址被读取为不正确的文件系统时$_GET价值观...它并不是试图寻找/abou/welcome.php因为有一个文件扩展名,最终会被抛出到真正的404页面,并且它不会尝试去/abou/404因为在我的 .htaccess 文件中,我提供了 404 页面的完整路径:http://mrobertsdesign.ca/404。这就是我迷路的地方。

  • stackoverflow 如何实现它在 .htaccess 文件中所做的事情,您可以在其中删除部分 url,它会尝试用最接近的相似 url 填充它或抛出 404 错误页面?

答案!

As @Phil_1984_指出,以下行与ErrorDocument请求,这导致我的 404 未找到错误/welcome.php页面和ErrorDocument请求本身:

    else {
        $page = 'home';
        $url = '/' . $page;
    }

他最初的想法是将这行代码更改为以下内容:

    else {
        http_response_code(404); exit; 
    }

这让我想到,我已经有了动态布局设置,我可以返回$_GET值到页面,而不是尝试将整个页面重定向到 404 页面 - 事实证明,这就是导致问题的原因。

解决方案是,不要尝试将整个页面重定向到 404 页面(从技术上讲,因为整个站点是由这个 PHP 脚本和一系列包含构建的)到 404 页面,而是将$_GET回到$path这样包含文件include('includes/' . $path . '.php');会读取它并将 404 文档包含到页面中(因为它会以任何方式执行,唯一的区别是 url 不会改变)。

    else {
        $page = '404';
        $path = 'content_' . $page;
    }

来自 Apache 文档:

https://httpd.apache.org/docs/2.2/custom-error.html https://httpd.apache.org/docs/2.2/custom-error.html

确保路径正确并且启用了AllowOverride。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTACCESS 404 错误无法正常工作 的相关文章

  • in_array 与 isset - 性能

    考虑以下代码片段 例子 1 array Array 1 2 3 4 5 6 7 array test Array 3 5 4 7 3 6 7 8 8 9 3 foreach array test as value if in array v
  • 使用 php 脚本从不同网站读取文件

    如何从完全不同的服务器读取文件的内容 然后显示内容 我稍后将更改代码以正确地使用返回的信息 您可以使用file get contents http php net file get contents or cURL http php net
  • 使用 PHP 解析 XML 导航站点地图

    我正在从 XML 文件实现 PHP 站点地图解析器 我做得相对不错 但是 我需要解析器更加动态 我需要实现一个递归函数 它将继续循环找到的每个 child node 一个节点可以在另一个 child node 中包含许多 child nod
  • 如何在另一个 php 脚本的后台运行 php 脚本(如更新按钮)

    当我按下 更新 按钮时 我将如何运行一个 php 脚本 然后它将运行脚本 x1 php 没有回显或其他输出 成功或失败 然后更新当前页面 我知道更新部分可以使用 ajax 完成 但我不确定如何以及如何让 x1 php 脚本在后台运行并在完成
  • MVC:我应该在哪里格式化数据?

    我从模型 带有数据的数组 获取数据 并且需要以特定格式显示 我需要迭代数组 格式化数据然后显示它 我应该在哪里格式化数据以显示 在模型 控制器还是视图中 谢谢 对数组的迭代并显示数据是在视图中完成的 因此我也会在视图中进行格式化 如果格式化
  • json_array 中的教义搜索[重复]

    这个问题在这里已经有答案了 我试图在 Doctrine Symfony 3 中的 json 类型中进行基本搜索 我的字段声明如下 ORM Column name data type json array nullable true priv
  • HTACCESS 404 错误无法正常工作

    问题 在此服务器上找不到请求的 URL welcome php 此外 尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误 事情是这样的 当我访问 www mysite com page 时它工作正常 如果
  • 如何用PHP识别google/yahoo/msn的网络爬虫?

    AFAIK SERVER REMOTE HOST 应该以 google com 或 yahoo com 结尾 但这是最有保障的方法吗 还有其他出路吗 您通过以下方式识别搜索引擎用户代理和IP地址 http www jafsoft com s
  • 删除一行或多行后,在 auto_increment 列上使用下一个可能的主键

    我有一个带有主键 自动增量 ID 列的表 当我删除具有最高 ID 的行 例如 ID 100 时 我想仅使用 mysql 触发器将该 ID 100 用于新行 我怎么做 当我删除时 例如 ID 1 并且最高 ID 是 100 我不想再次使用 I
  • 如何使用 PHP 访问关联数组中的值

    我有一个数组 它是使用 Amazon SimpleDb 进行选择查询的结果 这是我 print r result 时的示例数据 Array 0 gt Array Name gt 5140ede647e74 Attributes gt Arr
  • Sublime Text 3 PHP 单元

    在 Sublime Text 3 PHP 单元中不起作用 捆绑包已正确安装 但插件处于非活动状态 有人解决了这个问题吗 提前致谢 我强烈建议你使用这个包isn t可在包控制上使用 Sublime PHPUnit https github c
  • 如何在带有 PHP-FPM 和 NGINX 的 Ubuntu 18.04 LTS 中使用 Oracle Instant Client 启用 OCI8 PHP 扩展?

    我使用的是最新的 PHP 包https launchpad net ondrej archive ubuntu php https launchpad net ondrej archive ubuntu php 当我构建并安装 OCI8 扩
  • 文件上传:完成百分比进度条

    我正在尝试为头像上传添加 到目前为止完成的百分比 进度条巴迪出版社 https github com buddypress BuddyPress 目的是阻止用户在上传完成之前离开页面 上传过程由 BuddyPress 处理bp core a
  • Moodle 2.0 与 Nginx 后端

    您好 我正在寻找有关如何为 Moodle 2 0 配置服务器 以 nginx 作为服务器 以 PHP FPM 或 FastCGI 以 mySQL 作为后端 的教程 抱歉 如果我对服务器架构菜鸟的这些术语感到困惑 可能会在 Ubuntu De
  • 通过 php 请求表单名称[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 当我提交表单时 我想从 php 检索
  • PHP:创建边缘光滑的圆圈、图像或字体?

    我正在制作一个 PHP 图像脚本 它将在给定的半径处创建圆圈 I used 但讨厌它产生的粗糙边缘 所以我正在考虑制作或使用圆形字体 我将使用以下方式输出 这样字体就会产生一个边缘光滑的圆圈 我的问题是使 字体大小 与 半径大小 匹配 有任
  • 使用 PHP 删除字符串的前 4 个字符

    如何使用 PHP 删除字符串的前 4 个字符 你可以使用substr http php net manual en function substr php函数返回从第 5 个字符开始的子字符串 str The quick brown fox
  • 有人可以向我指出一个好的 PHP/MySQL 加盐哈希密码实现吗?

    在阅读了盐密码哈希之后 我想为我正在构建的站点的管理区域实现一个简单的版本 如果您有任何很好的链接以及很好地实现了这个想法的代码 如果您能分享 我将不胜感激 Thanks 注册过程 用户输入密码 系统根据随机数据生成盐值 可能是时间和 PI
  • PHP Post 数组的数组

    我想从 HTML post 请求更改两个不同的表到运行 PHP 的服务器 以前 当我只想更改一张表时 所有列和值都放入 POST 数组中 所以我会 colname1 gt val1 colname2 val2等等 然后我将循环 POST 来
  • 为什么 PHP 函数调用*如此*昂贵?

    PHP 中的函数调用是昂贵的 这是一个测试它的小基准

随机推荐

  • 从 Android 上的 .net Web 服务获取列表

    我有 net Web 服务 我想在 android 上使用它 这个网络服务的方法返回List Of String 但我在android上没有得到响应 我能做些什么 这是代码 我已经研究了 3 天 但还没有找到任何解决方案 简而言之 我需要来
  • Sails.js 使用 Skipper 将文件上传到 AWS S3

    我有一个表格 您可以在其中上传文件 我直接用船长上传文件 效果很好 req file file upload adapter require skipper s3 key key secret secret bucket bucketnam
  • Sprite Kit 中的 SKShapeNode 性能不佳

    我正在做一个 曲线 http en wikipedia org wiki Achtung die Kurve Sprite Kit 中的克隆 对于不断移动的线路 玩家 我使用 CGMutablePathRef 和 SKShapeNode 在
  • FlyingSaucer renderer.setDocument 抛出“流已关闭”异常

    我在使用找到的简单示例创建 PDF 时遇到问题here http today java net pub a today 2007 06 26 generating pdfs with flying saucer and itext html
  • 如何在多视图和恢复控件中使用AVPlayer?

    我在 iOS 6 1 上使用 xcode 4 6 创建一个应用程序 其中包含 TabBar 和 2 个不同的 tableView 每个表视图从 file plist 读取一行 当点击一行时 您会加载一个 DetailView DetailV
  • 向 SQL Server 用户授予执行权限以仅运行特定作业

    我请求创建可由特定 SQL 用户运行的 SQL Server 代理作业 如何在不授予用户执行权限的情况下完成此操作sp start job存储过程意味着他也可以运行所有其他禁止的作业 如果不授予用户对 sp start job 存储过程的执
  • 从数组中删除匹配元素的第一个实例

    假设我有数组 1 2 3 1 2 3 我想删除 比如说 的第一个实例2从数组给出 1 3 1 2 3 最简单的方法是什么 li delete at li index n li length li li length 超出范围 所以 li l
  • 从批处理文件运行 .jar

    我已经创建了一个可执行文件 jar文件 我怎样才能执行 jar使用批处理文件而不提及类路径 在 Windows 上 您可以使用以下命令 start javaw jar JarFile jar 通过这样做 命令提示符窗口不会保持打开状态
  • 如何检查设备是否可以通过有效的 WiFi 连接访问互联网?

    我指的是设备已连接到接入点但由于某种原因被阻止使用此 AP 访问互联网的情况 检查wifi是否启用 WifiManager wfManager WifiManager getSystemService Context WIFI SERVIC
  • list_local_device 张量流未检测到 GPU

    有没有办法检查我安装了GPU的版本Tensorflow nvidia smi 2017 年 12 月 18 日星期一 23 58 01 NVIDIA SMI 384 90 Driver Version 384 90 GPU Name Per
  • 当 HTML 作为输入字符串和 CSS 作为文件传递时,使用 Html2pdf 将 Itext7 HTML 转换为 PDF

    我已经通过 Itext 5 XMLWorker 实现了 HTML 到 PDF 的转换 请找到下面的代码 using var ms new MemoryStream using var document new Document using
  • android - 自动检测未使用的绘图

    问题是 我在开发 Android 应用程序时使用了许多图标和图片 后来我替换了其中的许多图标和图片 但保留了旧的 以防我需要再次使用它们 我现在有大量我的 png 的drawable文件夹中 许多现在都未使用 手动整理它们需要很长时间 有没
  • WIX 生成的 MSI 的自定义卸载程序

    我有一个从 WIX 脚本生成的 MSI 我的问题与此类似question https stackoverflow com questions 563236 custom repair and uninstall funtions for m
  • 为什么我的侧载应用程序在几天后停止工作?

    所以我实际上对 iOS 开发有点陌生 然而 在学习如何操作后 我已经制作了一些应用程序 但我注意到的一件事是 如果我使用手机来测试我的应用程序 该应用程序将在插入时运行 也许一两天后 但在那之后 如果我尝试打开它 它就会停止工作并崩溃 就像
  • 使用lastModified日期搜索DAM资产和Cq页面|查询生成器

    我正在根据上次修改日期查询 cq 页面和资产 以下是必须放入查询生成器调试器中的文本 fulltext geometrix 1 group p or true 1 group 1 group p and true 1 group 1 gro
  • 使用递归求数字之和

    对Java来说相当陌生 但我正在编写一个教程 其中我必须使用递归找到用户输入整数的数字总和 到目前为止 这是我的代码 公开课其他 public static void main String arg Scanner s new Scanne
  • 无法使用带有 socket.io 的媒体源从媒体记录器跳转到流

    当首先加载视频观察客户端然后加载网络摄像头客户端时 以下代码可以正常工作 但是 如果顺序交换或以任何方式中断流 例如通过刷新任一客户端 则流将失败并且媒体源会将其就绪状态更改为关闭 我的假设是 在开始时接收的视频需要初始化标头才能启动 并且
  • R:使用字符串作为参数来改变 dplyr 中的动词

    我正在构建一个闪亮的应用程序 它需要允许用户定义新的绘图变量 具体来说 我想允许用户定义要在 mutate 动词中使用的表达式 服务器接收文本形式的表达式 我想知道如何让 mutate 在 dplyr 0 7 中执行它 我可以使用 muta
  • 循环不断在字符串中添加空格?

    我有以下代码 sHexPic string to hex sPic sHexPic insert sHexPic begin 2 sHexPic insert 2 我想知道如何将其放入计数循环中并在每第二个字符后添加一个空格 到目前为止 这
  • HTACCESS 404 错误无法正常工作

    问题 在此服务器上找不到请求的 URL welcome php 此外 尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误 事情是这样的 当我访问 www mysite com page 时它工作正常 如果