gpt4 book ai didi

apache - 如何告诉 Apache 忽略/阻止 404 错误并重定向到处理程序页面?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:30:31 30 4
gpt4 key购买 nike

概念

所以,我已经制作(实际上升级)了这个网站,它有自己的内容管理系统 (CMS),每个人都喜欢。与大多数 CMS 一样,默认行为是使用丑陋且完全无用的 url 访问页面,如下所示:

www.mysite.edu/index.php?pageid=xxxx

所以我们的想法是改变它,这样我们就可以拥有“真实”的 URL,这些 URL 不仅看起来更好,而且有望与 Google 搜索引擎更好地合作。改变真的没有那么难:

  1. 通过 Apache 发现没有相应 URL 的页面,并使用 ErrorDocument 404/redirect.php 重定向到/redirect.php
  2. redirect.php 剥离 URL 并在数据库中找到它的条目。
  3. redirect.php 从页面条目中回显 HTML 数据。

因为所有页面都是在分层结构中创建的(根据 CMS),找到页面只是一个 child 一个 child 地搜索数据库直到找到最后一个的问题。这样,www.mysite.edu/me/something/useful 等 URL 将显示 useful 中的条目,它是 something 的子项> 这是的 child 。所有页面 HTML 都存储在数据库中,因此一旦找到条目,通过 PHP 将其回显到页面是一件简单的事情。

旁注:我实际上创建了一个新表来存储每个页面的完整 URL 并将其链接到它的 pageid 因此搜索过程得到了很大改进,同时总体思路保持不变。

问题

在客户端,一切都运行良好。然而,我注意到谷歌还没有为我们网站的大部分(任何)内容编制索引。基本上,在我重新设计它之前,它在某种程度上已经被索引了,现在索引中剩下的就是那些 URL 保持不变的文件。

我终于(今天)从 Google 网站站长工具中获得了一些数据,表明它在我们的 sitemap.xml 中列出的页面上不断出现 404 错误,但是,当我点击链接时,页面出现得很好。这让我相信,虽然重定向运行良好,但 Apache 仍在发送 Status: 404 消息,这可能会提示 Google 的机器人停止处理和/或不为页面编制索引。

问题

考虑到所有这些,问题是:

  1. 有没有办法首先确认 Apache 仍在发送 Status: 404 消息?
    • 回答:是的!
  2. 有没有办法让它停止,同时仍然重定向到/redirect.php

提前致谢!

编辑 1: 感谢 alex 向我介绍 firebug 中的“网络”选项卡。由于我非常喜欢并经常使用 firebug,所以我相信这个新功能会在以后派上用场(阅读:目前正在研究它可以做的其他事情)。感谢您的帖子,我能够确认 Status: 404 确实是需要解决的正确问题。现在的问题是如何我如何禁止 Apache 发送此错误并根据需要简单地重定向页面。

根据要求,这里是我的文件中的一些代码示例。关于配置文件需要注意的一件事是我在 Debian Etch 上运行并通过“apt-get install apache2 mysql-server php5”安装,因此它们分散了一点,并且列出的一个是我认为对这个问题有影响的唯一一个。由于它是一个大文件(669 行),如果您想查看更多内容,请告诉我哪些部分有用,我会包含它。

/etc/apache2/apache2.conf

...
ErrorDocument 404 /redirector.php
...

/etc/apache2/apache2.conf - 空白文件

/www-root/redirector.php

<?php
//get the URL string after server id.
// e.g. www.mysite.edu/page returns "/page"
$pageReq = preg_replace("/\/$|\.php$|\.html?$/","",$_SERVER['REQUEST_URI']);

if(substr($pageReq,0,5)=='/wiki') { //am I redirecting to the wiki app
include "mewiki/wiki.php";
} else { //rest of site - what google will see
if($pageReq=='') //most site looks like /ME/something
$pageReq = '/ME'; //this fixes index to be appear as /ME
include "config.php";

//query the database for pageid
mysql_connect($meweb['host'],$meweb['user'],$meweb['pass']);
mysql_select_db($meweb['database2']);
$qPageReq = mysql_query("SELECT pageid FROM url_redirects WHERE ".
"url='".$pageReq."'".
"ORDER BY updated DESC LIMIT 1");
if($qPageReq) {
//query database for actual page
$pageid = mysql_fetch_assoc($qPageReq);
$qPage = mysql_query("SELECT * FROM pages WHERE pageid=".
$pageid['pageid']);
if($qPage) {
//createPage() is in page_loader.php. It actually does a lot
include "page_loader.php";
createPage(mysql_fetch_assoc($qPage));
}
}
mysql_close();
}
?>

最佳答案

您需要发送 OK header ,将 header('HTTP/1.1 200 OK') 添加到您的代码中。

关于apache - 如何告诉 Apache 忽略/阻止 404 错误并重定向到处理程序页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583922/

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