2

コンセプト

ですから、私はすでにこのウェブサイトを、誰もが好む独自のコンテンツ管理システム (CMS) で作成 (実際にはアップグレード) しました。ほとんどの CMS と同様に、デフォルトの動作は、次のような見苦しくまったく役に立たない URL を持つアクセス ページでした。

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

そのため、見栄えが良くなるだけでなく、Google 検索エンジンとうまく連携できるように、「実際の」URL を使用できるように変更するというアイデアがありました。変更はそれほど難しくありませんでした。

  1. Apache 経由で該当する URL のページがなかったことを確認し、ErrorDocument 404 /redirect.php を使用して /redirect.php にリダイレクトします。
  2. redirect.php は URL を取り除き、データベースでそのエントリを見つけます。
  3. redirect.php は、ページ エントリから HTML データをエコーし​​ます。

すべてのページは (CMS に従って) 階層構造で作成されているため、ページを見つけるには、最後のページが見つかるまでデータベースを子ごとに検索するだけで済みました。このように、 のような URLは、 の子が の子であるエントリwww.mysite.edu/me/something/usefulを表示します。すべてのページ HTML はデータベースに保存されるため、エントリが見つかったら、PHP を介してページにエコーするのは簡単なことです。usefulsomethingme

補足:実際には、各ページの完全な URL を保存してリンクする新しいテーブルを作成したpageidので、検索プロセスが大幅に改善されましたが、一般的な考え方は変わりません。

問題

クライアント側では、すべてが驚くほどうまく機能します。しかし、Google がまだ私たちのサイトのほとんど (どれも) をインデックスしていないことに気付きました。基本的には、再設計する前にある程度インデックスが作成されていましたが、インデックスに残っているのは、URL が同じままのファイルだけです。

ついに (今日) Google Webmaster Tools から、sitemap.xml にリストされているページで 404 エラーが発生し続けるというデータを取得しましたが、リンクをクリックすると、ページは問題なく表示されます。これにより、リダイレクトがうまく機能している間、Apache はまだStatus: 404メッセージを送信しており、おそらく Google のボットに処理を停止したり、ページのインデックスを作成したりしないように促すと思われます。

質問

したがって、これらすべてを念頭に置いて、質問は次のとおりです。

  1. Apache がまだStatus: 404メッセージを送信していることを最初に確認する方法はありますか?
    • 答え:はい!
  2. /redirect.php にリダイレクトしている間に停止させる方法はありますか

前もって感謝します!

編集 1: firebug の [ネット] タブを紹介してくれてありがとう、アレックス。私は firebug が大好きでよく使っているので、この新機能は今後役に立つと確信しています (読んでください: 現在、他にできることを調査中です)。あなたの投稿のおかげで、これが実際に対処が必要な正しい問題であることを確認できましたStatus: 404ここで問題となるのは、具体的には、 Apache がこのエラーを送信するのを無効にし、必要に応じてページをリダイレクトする方法です。

リクエストに応じて、私のファイルからいくつかのコード サンプルを示します。構成ファイルについて注意すべきことの 1 つは、私は 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();
}
?>
4

2 に答える 2

1

Firebug を使用して、404 ヘッダーを送信しているかどうかを確認できます。ネットタブをご利用ください。404ing の場合、ページの GET は赤で表示されます。または、ライブ HTTP ヘッダーを使用できます。これらは Firefox 専用です。

redirect.php にリダイレクトする .htaccess の一部を投稿できますか?

于 2009-02-24T23:16:29.777 に答える