2009-04-14 8 views
1

Ich bin eine große statische Website von mehr als 500 Seiten zu einer Joomla-Installation verwendet werde, aber was ich tun zu wollen, anstatt Code eine .htaccess-Datei 500+ Linie, ist PHP gebaut zu verwenden in 301 header redirect, um Anfragen, die in die neue URL eingehen, dynamisch umzuleiten.301 umleiten mit PHP und MySQL auf 404

So zum Beispiel, nachdem ich die Seite bewegen, wird die folgende URL würde 404 ohne redirect-

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

ich es

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

So würde ich umleiten möchten möchten um eine MySQL - Datenbank mit alten URLs und ihrer entsprechenden neuen URL zu erstellen und dann, wenn der Server eine 404 zurückgibt, zuerst die DB nach der existierenden alten URL zu checken, und wenn sie übereinstimmt, eine 301 - Weiterleitung an die neue URL Richtig, mache ich hier Sinn?

Wie würde ich das tun? Ich kann die Logik "sprechen", aber nicht wirklich sicher, wo ich anfangen soll oder wie ich es erreichen kann, weil ich, obwohl ich PHP verstehe, nicht wirklich verstehe, wie das mit Apache funktionieren würde (oder auch wenn es zum Beispiel ...) ?

Und wenn Sie wissen, dass Skripte aus, dass es bereits tun dies sind, umso besser.

Antwort

5

In der Apache-Konfiguration, setzen ein Errordocument von was auch immer /404handler.php Skript Sie möchten. In seinem Ausführungskontext wird $ _SERVER ['REQUEST_URI'] der URI der ursprünglichen angeforderten Seite sein. Suchen Sie nach Ihrer Datenbank, und wenn Sie eine Seite finden, die Sie umleiten möchten, verwenden Sie header ("Location:". $ Wo auch immer), um dorthin umzuleiten.

0

Anstatt eine Datenbank zu erstellen, warum nicht nur eine Umleitung auf eine Seite mit der alten URL setzen (dh. Old_page.html)?

Da Sie offensichtlich diese Basis mit den Datenbankeinträgen auf einer Fall-zu-Fall tun, könnten Sie tun es nur als ein Fall-zu-Fall-Basis mit den Seiten.

Sie könnten ein schnelles Perl-Skript schreiben oder was auch immer Sie diese HTML-Seiten zu erzeugen, wie für Sie eine alte Seite der Namen gegeben und die URL der neuen Seite.

1

Die einfachste Möglichkeit, die ich mir vorstellen kann, wäre die Verwendung mod_rewrite (Link zu einer großen Einführung Tutorial) um alle eingehenden Anfragen auf ein einzelnes PHP-Skript umleiten (oder verwenden Sie ein Flag, so dass diese Umleitung nur passiert, wenn die Anfrage ist für eine Datei, die nicht existiert), wobei die angeforderte Adresse als Teil der Abfragezeichenfolge übergeben wird. Von dort aus muss das PHP-Skript nachschlagen, wohin diese Anfrage gehen soll, und dorthin umleiten.

Wenn also jemand versucht, http://www.foo.com/old_page.html zu öffnen, würde der mod_rewrite an etwas wie http://www.foo.com/redirect.php?page=old_page.html senden. redirect.php sucht dann in der Datenbank nach der neuen Adresse für "old_page.html" und leitet sie dorthin um.

old_page new-page 
# … 

Aber Sie werden diese Karte in Sie httpd.conf (oder virutal Host-Konfiguration) definieren müssen:

0

Sie könnte auch ein RewriteMap verwenden

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

Sie können dann mit, dass Karte in Ihrem.htaccess Datei:

RewriteCond ${oldtonew:$1} .+ 
RewriteRule ^(.*)\.html$ /%0.html [L,R=301] 
Verwandte Themen