2010-11-04 25 views
9

Ich habe beschlossen, alle meine /dyanmic.php?UID=... Seiten zu /static/Name-From-DB zu ändern. Ich habe gelesen, dass der beste Weg, die Umleitung zu tun, SEO klug, eine 301 .htacess Umleitung zu implementieren ist:htaccess redirect vs php redirect

(http://www.tamingthebeast.net) - Der richtige Weg - ein .htaccess 301 Redirect: Eine 301 Redirect ist die effiziente und spider/besucherfreundliche Strategie für Websites, die auf Servern mit Apache gehostet werden.

Da ich aber Tausende von Seiten, muß ich die Umleitung verwenden, um es ziemlich ineffizient scheint Tausende von Einträgen in der .htacess Datei hat:

redirect 301 /dynamid.php?UID=1 http://www.domain.com/static/Name-From-DB 
redirect 301 /dynamid.php?UID=2 http://www.domain.com/static/Another-Name-From-DB 
and so on... 

Daher scheint es, wie die effiziente Art und Weise zu tun, es über die PHP-Seite ist nach dem Header 301 Umleitung Einstellung auf die UID:

<? 
Header("HTTP/1.1 301 Moved Permanently"); 
// Getting the page static name from the DB according to the UID 
$result = mysql_query('SELECT Name FROM DB WHERE UID='$_GET["uid"]''); 
$row=mysql_fetch_assoc($result); 
// Redirect to the new page 
Header("Location: http://www.domain.com/static/" . $row[0]); 
?> 

Meine Frage ist, ob diese Methode in negativer Weise beeinflussen wird meine Seiten Rankings auf, die Paragr Berücksichtigung aph Ich habe oben gesagt, dass der beste Weg, um eine Umleitung zu tun, durch die. Htaccess ist.

Danke!

+10

Ihr Beispiel PHP-Code ist nicht sicher. Ich habe einen SQL-Injection Bug! Sie müssen $ _GET ["uid"] entkommen! –

Antwort

9

Die gleichen Header werden auf die gleiche Weise gesendet, wie Sie es tun. Daher wird es für den Benutzer (oder für eine Suchmaschine) nicht anders sein, also wird PHP Ihren Seitenrang im Vergleich zum .htaccess-Weg nicht negativ beeinflussen.

Die PHP-Methode wird ein wenig langsamer, da bei jedem Zugriff auf die Seite eine Datenbankabfrage ausgelöst wird. Wenn die Website nicht zu viele Zugriffe auf diese Seiten hat, sollte dies kein Problem sein.

Führen Sie in Ihrer PHP-Seite zuerst die Datenbankverbindung aus. Wenn die Seite nicht existiert, möchten Sie sie entweder auf eine andere Seite umleiten oder 404 Fehlerheader anstelle des 301-Headers übergeben.

2

Nein. Der Client sieht in beiden Fällen dasselbe: 301 Weiterleitung. Der einzige Unterschied könnte eine Verzögerung sein, da der .htaccess vor der php-Datei verarbeitet wird und die sql-Abfrage eine gewisse Verzögerung hinzufügen kann, aber ich denke, dass die Verzögerung unbedeutend klein ist.

3

Meine Frage ist, ob diese Methode auf die Rangliste meiner Seiten in negativer Weise wirkt, bedenkt man den oben zitierten Absatz, dass die beste Möglichkeit für eine Umleitung die .htaccess ist.

Keine, wird es nicht vorgesehen, dass Sie die Umleitung richtig in Ihrer PHP-Datei implementieren! Das heißt, Sie sollten wahrscheinlich den Name (von uid) vor Ausstellung der 301-Header (und nur Ausgabe dies, wenn ein Name gefunden — ansonsten ist es ein 404) nachschlagen.

Auch, warum führen Sie nicht eine Abfrage für Ihre Datenbank, geben Sie die Weiterleitungen in .htaccess Format und schreiben Sie dies direkt in die .htaccess Datei?Auf diese Weise müssen Sie tun es nur einmal und müssen nicht über nicht vorhandene uid s kümmern.


bearbeiten — Pseudo-Code

str ← "" 
for each (uid, Name) in database: 
    line ← concat("Redirect 301 /dynamid.php?UID=", uid, "http://www.domain.com/static/", Name, <newline>) 
    append line to str 
copy or write str to .htaccess 

dies tun, werden Sie noch in der Lage sein, Ihre Umleitungen in einem Jahr zu finden (sie alle in .htaccess sind) und es nicht mehr ist eine Notwendigkeit, in der Datenbank nach jeder "alten" Anfrage zu suchen.

+0

Zuerst, danke für die Antwort. Der einzige Nachteil, den ich auf diese Weise gesehen habe, ist, dass ich mit der Zeit glaube, dass die Mehrheit der Besucher zur/static/Seite und nicht zur /dynamic.php kommen wird. Also denke ich, dass die Auflistung von 3000+ Reidrection in der .htaccess-Datei ein Overhead sein wird, da die meisten Besucher zu/static/und nicht/dynamic kommen, aber trotzdem die 3000+ Zeilen des .htaccess durchlaufen müssen, um zu sehen, ob sie Passen Sie jede Umleitungsregel an. Vielleicht irre ich mich? – Joel

+0

@Joel Ja, in diesem Fall ist die dynamische PHP-Lösung wahrscheinlich einfacher zu pflegen und auf lange Sicht weniger ressourcenintensiv. Denken Sie daran, die Umleitung richtig zu implementieren. – jensgram

1

Es hat keinen Einfluss auf Ihren Seitenrang. Google erkennt, wenn Sie mitteilen, dass Ihre Seiten verschoben wurden und dass Sie Ihre Website nicht mit doppeltem Inhalt verwalten.

Aber wie in anderen Antworten gesagt, der Header ist der gleiche, ob Sie es von PHP oder Apache senden - Ihr Fokus sollte sein, wie Sie Ihre Arbeit minimieren; jetzt und in der Zukunft.

Durch manuelle Eingabe der Weiterleitung in .htaccess geben Sie sich tatsächlich mehr Arbeit als nötig, wenn Sie im Bedarfsfall dynamisch Header über Ihr PHP hinzufügen.

0

... der beste Weg, um eine Umleitung zu tun ist durch die .htaccess ...

Wenn Sie auf einem gemeinsamen Server sind, der Fall sein kann, aber auf einem in Bezug Lange oder sogar eine kurze Liste von Dateien, dass. Htaccess-Datei mit jedem Dateizugriff innerhalb Ihrer Seite gesucht wird - Jede Grafik, jede Include-Datei, etc.

Nicht nur das, aber, wenn Sie ein sind Einige Ebenen tief, es sucht nach .htaccess-Dateien in allen übergeordneten Verzeichnissen. Also, wenn Sie Ihre Datei in zu Hause ist/dir1/dir2/dir3, es wird für .htaccess-Dateien in jedem Verzeichnis mit jedem Dateizugriff überprüfen:
home/dir1/dir2/dir3/
home/dir1/dir2/
home/dir1/
home/

Am besten, um es so leicht wie möglich zu halten. Wenn Sie sich nicht auf einem gemeinsam genutzten Server befinden, sollten Sie keine .htaccess-Dateien verwenden. Geben Sie in die Hauptkonfigurationsdatei unter Directory alle Anweisungen ein, und legen Sie AllowOverride auf "none" fest.