Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

php?mode=article&k=102 redirect 301 [ERLEDIGT]

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
tom971
PostRank 1
PostRank 1
Beiträge: 10
Registriert: 26.07.2008, 10:36

Beitrag von tom971 » 18.08.2008, 00:35

Hy

ich habe schon par mal alle Temen hier durch, aber ich finde nicht die Lösung.

Ich habe mein alten Forum aufgelöst und einzelne Seite auf .html umgeschrieben und jetzt wollte ich, so lange noch alte bei google indexiert sind, mit permanent redirect auf diese neue umleiten.
Syntax

alten link

Code: Alles auswählen

http://xxx-yyy.tld/kb.php?mode=article&k=102
http://xxx-yyy.tld/kb.php?mode=article&k=103
sol auf

Code: Alles auswählen

http://xxx-yyy.tld/neu/daten.html
http://xxx-yyy.tld/neu/daten2.html
umgeleitet werden
Wobei sind die Namen von alten und neuen nicht immer gleich, ich will für jeder einzelnen Link ein neues 301 erstellen

Damit habe probiert, leider ohne erfolg

Code: Alles auswählen

RewriteEngine on
Redirect 301 /kb.php?mode=article&k=102 http://xxx-yyy.tld/neu/ordner.html
Problem ist irgendwo mit

Code: Alles auswählen

?mode=article&k=102
das kann man nicht so einfach auf html umleiten( habe getestet auf php ohne Probleme)

mod_rewrite funktionirt, habe mit google getestet

Viel dank
Tom
Zuletzt geändert von tom971 am 18.08.2008, 12:28, insgesamt 1-mal geändert.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 18.08.2008, 09:32

tom971 hat geschrieben:Wobei sind die Namen von alten und neuen nicht immer gleich, ich will für jeder einzelnen Link ein neues 301 erstellen

Damit habe probiert, leider ohne erfolg

Code: Alles auswählen

RewriteEngine on
Redirect 301 /kb.php?mode=article&k=102 http://xxx-yyy.tld/neu/ordner.html
Mal abgesehen davon, dass Redirect nichts mit mod_rewrite zu tun hat, das „RewriteEngine on“ also überflüssig wäre (wäre!, siehe unten), arbeitet Redirect mit URL-Pfaden, das ist der Teil ab dem ersten Schrägstrich (einschließlich) bis zum ersten Frage- oder Nummernzeichen (ausschließlich). Die URL-Parameter, der Kram, der hinter dem Fragezeichen steht und gern als Variablen tituliert wird, gehören also nicht dazu.
Redirect fällt somit aus, auch wenn's für vieles die bessere Lösung als mod_rewrite ist, da einfacher aufgebaut.

Bleibt dann doch nur mod_rewrite, aber auch RewriteRule kann nur mit URL-Pfaden umgehen. Dein Freund in der Not ist RewriteCond, das kennt nämlich eine Variable namens QUERY_STRING. So in etwa müsste es funktionieren:

RewriteEngine on
RewriteBase /

RewriteCond %{QUERY_STRING} ^mode=article&k=102$
RewriteRule ^kb\.php$ https://example.com/neue_url.html? [R=301,L]

Hier wird mit RewriteRule erst geprüft, ob wir überhaupt eine alte URL haben (^kb\.php$), anschließend prüft RewriteCond, welche Parameter übergeben wurden, und zum Schluss erfolgt die gewünschte Weiterleitung zur neuen URL. Das RewriteRule/RewriteCond-Pärchen ist für jede einzelne URL zu wiederholen.
Das Fragezeichen am Ende der neuen URL verhindert, dass die alten Parameter an die neue URL angehängt werden. Ohne Fragenzeichen bekämen wir eine Weiterleitung nach https://example.com/neue_url.html?mode=article&k=102, was ja nicht Sinn der Sache ist.

Nun weiß ich nicht, wie viele alte Dateien / PHP-Skripte du weiterleiten möchtest, aber ich halte es für wesentlich schlauer, statt der .htaccess-Lösung die Weiterleitungen in kb.php selbst vorzunehmen. Das Ergebnis nach außen hin ist dasselbe, aber du ersparst dem Server das bei jedem einzelnen Zugriff, auch bei jenen auf neue Dateien, Grafiken und sonstiges, notwendige Auswerten der .htaccess. Mit in etwa folgendem Code in kb.php fällt dieser unnötige Ballast weg:

kb.php:

Code: Alles auswählen

<?php
$urls = Array&#40;
    "mode=article&k=102" => "/neue_url.html",
    "mode=article&k=103" => "/andere_neue_url.html"
&#41;;

if &#40;isset&#40;$urls&#91;$_SERVER&#91;"QUERY_STRING"&#93;&#93;&#41;&#41; &#123;
    header&#40;"HTTP/1.0 301 Umgezogen"&#41;;
    header&#40;"Location&#58; http&#58;//example.com" . $urls&#91;$_SERVER&#91;"QUERY_STRING"&#93;&#93;&#41;;
&#125;
else &#123;
    header&#40;"HTTP/1.0 404 Gibt's nicht"&#41;;
    echo "<html><body>Object not found</body></html>";
&#125;

?>

tom971
PostRank 1
PostRank 1
Beiträge: 10
Registriert: 26.07.2008, 10:36

Beitrag von tom971 » 18.08.2008, 09:54

Hy
viel dank für den ausführliches Antwort.
Meine erste Gedanke war, weiterleitung direkt aus kb.php, aber..
Datein sollten von Server weg und es gibt zu viele url die ich zu weiterleite habe.
Kann man irgedwie Fragezeichen aus URL ausfiltern?
habe so versucht

Code: Alles auswählen

^/?mode=article&k=102$ 
auch nichts (mit Slash vor ? )
Danke
tomi
Zuletzt geändert von tom971 am 18.08.2008, 10:36, insgesamt 1-mal geändert.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 18.08.2008, 10:26

tom971 hat geschrieben:Dateien sollten von Server weg und es gibt zu viele url die ich zu weiterleite habe.
Gerade, wenn es Massen von Weiterleitungen sind, würde ich die Finger von der .htaccess lassen. Die .htaccess muss wie schon geschrieben bei jeder einzelnen Anfrage an deinen Server neu eingelesen und verarbeitet werden. Bei vielen Weiterleitungen ist das ein immenser Aufwand, der oftmals nutzlos betrieben wird, weil die allermeisten Anfragen gar nicht bearbeitet werden müssten.

Falls die Dateien selbst stören, was ich verständlich finde, würde ich auf eine Mischung aus .htaccess und PHP-Skript setzen. Beispiel:

RewriteEngine on
RewriteBase /
RewriteRule ^kb\.php$ alteurls.php?url=kb [QSA,L]
RewriteRule ^anderesskript\.php$ alteurls.php?url=anderesskript [QSA,L]

(Die RewriteRule-Zeilen lassen sich auch zusammenfassen: RewriteRule ^(kb|anderesskript)\.php$ alteurls.php?url=$1 [QSA,L]
)

In alteurls.php:

Code: Alles auswählen

<?php
$urls = Array&#40;
    "url=kb&mode=article&k=102" => "/neue_url.html",
    "url=kb&mode=article&k=103" => "/andere_neue_url.html",

    "url=anderesskript&x=murks" => "/bla.html",
    "url=anderesskript&x=wurgs" => "/fasel.html"
&#41;; 

if &#40;isset&#40;$urls&#91;$_SERVER&#91;"QUERY_STRING"&#93;&#93;&#41;&#41; &#123;
    header&#40;"HTTP/1.0 301 Umgezogen"&#41;;
    header&#40;"Location&#58; http&#58;//example.com" . $urls&#91;$_SERVER&#91;"QUERY_STRING"&#93;&#93;&#41;;
&#125;
else &#123;
    header&#40;"HTTP/1.0 404 Gibt's nicht"&#41;;
    echo "<html><body>Object not found</body></html>";
&#125;
?>
Alle alten URL-Pfade werden intern an einziges Skript namens alteurls.php umgeleitet. Das Skript bekommt die angefragte URL im Parameter url geliefert und vollzieht dann die tatsächliche, extern sichtbare Weiterleitung.

Du hättest mit diesem Hybrid erstens den technischen Aufwand aus der .htaccess raus, zweitens bleibt die .htaccess übersichtlich und bist drittens die ganzen alten Dateien, mit einer Ausnahme, los - und diese Ausnahme kannst du auch noch irgendwo hinschieben, wo sie nicht stört.
Kann man irgedwie Fragezeichen aus URL ausfiltern?
Inwiefern ausfiltern?

tom971
PostRank 1
PostRank 1
Beiträge: 10
Registriert: 26.07.2008, 10:36

Beitrag von tom971 » 18.08.2008, 10:38

Habe gedacht das ? mit etwas zu esetzen, (mit Platzhalter z.B)
Hm, aber ich will eigentlich alle alte Dateien von Server Weg, da sich hier um ein cBack Forum handelt, kann ich nicht Dateine einzeln löschen(z.B alles außer kb.php) wiell ich weis nicht ob dan kb.php funktioniert. Und drin ist die Code :-/

Danke

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 18.08.2008, 11:35

tom971 hat geschrieben:Habe gedacht das ? mit etwas zu esetzen, (mit Platzhalter z.B)
Wo möchtest du es ersetzen und was soll rauskommen?
Hm, aber ich will eigentlich alle alte Dateien von Server Weg, da sich hier um ein cBack-Forum handelt, kann ich nicht Dateine einzeln löschen(z.B alles außer kb.php) wiell ich weis nicht ob dan kb.php funktioniert. Und drin ist die Code :-/
Da kann ich dir jetzt nicht ganz folgen. Beim zweiten Vorschlag löscht du doch alle Dateien, zurück bleibt lediglich ein einzelnes PHP-Skript, das sämtliche (externe) Alt-Weiterleitungen übernimmt. Dieses Skript kannst du benennen, wie du möchest, und lagern, wo du möchtest, es ist nicht einmal nach außen hin sichtbar, weil die erste, von RewriteRule übernommene Weiterleitung intern im Server geschieht - in die Quere kommen kann sich da nichts.

tom971
PostRank 1
PostRank 1
Beiträge: 10
Registriert: 26.07.2008, 10:36

Beitrag von tom971 » 18.08.2008, 11:57

aa so d.H dein script alteurls.php ist dan die einzige script, Stark.
Alles anderes kann ich löschen, habe gedacht das auch alle Dateien die in alteurls.php genannt sind auch auf Server bleiben.
Kannst du mir nur erklären Zusammnehang von

Code: Alles auswählen

"url=anderesskript&x=wurgs" => "/fasel.html"
und rewrite für das(ich weis nicht was in meine Fall tatsäclih rein kommt)
Danke vielmals
PS ich Probiere.. Melde mich
Tomi
NACHTRAG: verstanden :oops: anderesscript hehe habe besser Rewriterul gelesen
Es geht suuuppeeer
Danke

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag