1

500 ページ以上の大規模な静的 Web サイトを Joomla インストールに転送していますが、500 行以上の .htaccess ファイルをコーディングするのではなく、PHP の組み込みの 301 ヘッダー リダイレクトを使用して、入ってくる要求を動的にリダイレクトします。新しい URL に。

たとえば、サイトを移動した後、次の URL はリダイレクトなしで 404 になります。

http://www.foo.com/old_page.html

にリダイレクトしたい

http://www.foo.com/old-page.php

したがって、古い URL とそれに対応する新しい URL の MySQL データベースを作成し、サーバーが 404 を返す場合は、最初に既存の古い URL の DB をチェックし、一致する場合は、新しい URL への 301 リダイレクト。右、私はここで理にかなっていますか?

どうすればいいですか?ロジックを「話す」ことはできますが、どこから始めればよいか、またはそれを達成する方法がよくわかりません。なぜなら、PHP は理解していますが、これが Apache でどのように機能するかをよく理解していないためです (または、たとえば、そうであったとしても...) ?

そして、すでにこれを行っているスクリプトを知っていればなおさらです。

4

4 に答える 4

5

Apache 構成で、好きな /404handler.php スクリプトの ErrorDocument を設定します。実行コンテキストでは、$_SERVER['REQUEST_URI']は要求された元のページの URI になります。データベース ルックアップを実行し、リダイレクトするページが見つかった場合は、header("Location: " . $wherever)を使用してそのページにリダイレクトします。

于 2009-04-14T15:31:45.273 に答える
1

私が考えることができる最も簡単な方法は、mod_rewrite (リンクは優れた紹介チュートリアルへのリンク) を使用して、すべての着信要求を単一の PHP スクリプトにリダイレクトすることです (または、要求がファイルに対するものである場合にのみこのリダイレクトが発生するようにフラグを使用します)。存在しない)、要求されたアドレスがクエリ文字列の一部として渡されます。そこから、PHP スクリプトにその要求の送信先を検索させ、そこにリダイレクトさせます。

したがって、誰かがhttp://www.foo.com/old_page.htmlを開こうとすると、mod_rewrite はhttp://www.foo.com/redirect.php?page=old_page.htmlのようなものに送信されます。次に、redirect.php はデータベースを検索して、"old_page.html" の新しいアドレスが何であるかを確認し、そこにリダイレクトします。

于 2009-04-14T15:34:37.950 に答える
0

データベースを作成する代わりに、古い URL (つまり、old_page.html) を持つページにリダイレクトを配置してみませんか?

明らかにデータベース エントリの場合はケースバイケースでこれを行っているため、ページの場合はケースバイケースで行うことができます。

古いページの名前と新しいページの URL を指定して、これらの html ページを生成する簡単な perl スクリプトなどを作成できます。

于 2009-04-14T15:29:13.670 に答える
0

次を使用することもできますRewriteMap

old_page new-page
# …

ただし、httpd.conf (または仮想ホスト構成) でそのマップを定義する必要があります。

RewriteMap oldtonew txt:/path/to/file/map.txt

次に、そのマップを .htaccess ファイルで使用できます。

RewriteCond ${oldtonew:$1} .+
RewriteRule ^(.*)\.html$ /%0.html [L,R=301]
于 2009-07-18T17:04:33.090 に答える