Seite 1 von 2

Redirect-Problem - Update: Nun 14,- Euro für die Lösung

Verfasst: 20.04.2006, 22:51
von Less
WICHTIG: Die Beschreibung zu der 14,- Euro Aufgabe findet sich ein paar Postings weiter unten!


Hallo!

Ich bemühe schon seit 2h die Suchfunktion hier, kann allerdings nichts entsprechendes finden:
Daher meine Frage, wie redirecte ich diese URL

viewtopic.php?t=1234IrgendeinAnhang

nach

thread.php?threadid=1234

um? Ich habe es bisher so versucht, leider funktioniert es nicht:

RewriteCond %{REQUEST_URI} ^/viewtopic.php?t=([0-9]*)
RewriteRule (.*) /thread.php?threadid=%1 [R=301,L]


Wo liegt denn der Fehler? Über eine Antwort wäre ich sehr dankbar!

mfg

Less

Verfasst:
von

Redirect-Problem

Verfasst: 21.04.2006, 00:12
von net(t)worker
RewriteCond %{REQUEST_URI} ^/viewtopic.php
RewriteRule /viewtopic.php?t=([0-9]+) /thread.php?threadid=$1 [R=301,L]

gehts so?

evtl. musst du auch mit dem %{QUERY_STRING} arbeiten

Verfasst: 21.04.2006, 00:26
von Less
Danke net(t)worker für die nächtliche Mühe, aber klappt leider auch nicht...

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

Jetzt anfragen: 0511 / 300325-0.


Redirect-Problem

Verfasst: 21.04.2006, 00:39
von net(t)worker
Hmm... dann halt durch die "Hintertür"....

Code: Alles auswählen

<?php
$domain="www.domain.de";
$location="http&#58;//".$domain."/thread.php?threadid=".$_REQUEST&#91;'t'&#93;;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;; 
header&#40;"location&#58; ".$location&#41;;
?>
$domain richtig eintragen und einfach als viewtopic.php ablegen..... :roll:

Verfasst: 21.04.2006, 11:04
von Less
Hmm, solche "Karteileichen", also Weiterleitungsseiten wollte ich eigentlich vermeiden und daher das ganze komplett in htaccess umsetzen. Ich habe ja bereits den großteil weitergeleitet, nur ein paar fehlen mir noch, ua. der obere.

Viele Grüße!

Less

Verfasst: 21.04.2006, 11:40
von haha
Ihr lagt beide schon recht nahe dran. Wirf' mal einen Blick in die Anleitung zu RewriteRule (https://httpsd.apache.org/docs/2.2/mod/ ... ewriterule), da wird extra in einem Kasten folgendes hervorgehoben:
Note: Query String

The Pattern will not be matched against the query string. To do this, you must use a RewriteCond with the %{QUERY_STRING} variable.
Du musst also die URL-Parameter (query string) separat mit RewriteCond und %{QUERY_STRING} prüfen:

RewriteCond %{QUERY_STRING} (^|&|;)=([0-9]*)
RewriteRule viewtopic.php thread.php?threadid=%2 [R=301,L]

Das (^|&|;)-Konstrukt sorgt dafür, dass t sowohl am Anfang als auch in der Mitte der Parameterkette stehen kann.

Eventuell möchtest Du auch statt mit [0-9]* mit [0-9]+ arbeiten, um unnötige Weiterleitungen bei eh unbrauchbaren URLs ("viewtopic.php?t=" oder "viewtopic.php?t=bla") zu vermeiden.

Verfasst: 21.04.2006, 12:23
von Less
hmm, klappt leider auch nicht. Fehlt in der RewriteCond evtl das t an irgendeiner Stelle?

Dennoch Danke!

Less

Verfasst: 21.04.2006, 14:10
von haha
Less hat geschrieben:Fehlt in der RewriteCond evtl das t an irgendeiner Stelle?
Richtig, das t ist mir irgendwie entwischt. Es muss natürlich (^|&|;)t=([0-9]*) lauten.

Verfasst: 21.04.2006, 14:17
von Less
Ich habe gerade mal alle Links zusammengestellt, die ich brauche, um mir die restlichen selbst zusammenzubasteln.

Da das ganze für euch einen gewissen Zeitaufwand bedeutet bin ich bereit pro sauberer und funktionierender Lösung 2,- Euro zu bezahlen, an denjenigen, der sie zuerst postet.

Das ganze soll per .htaccess gelöst werden und die Weiterleitungen sollen 301 Redirects sein.

Haupt-Liste:
1) https://www.domain.net/viewtopic.php?p=1234EvtlIrgendeinAnhang -> https://www.domain.de/thread.php?postid=1234#1234

2) https://www.domain.net/ftopic1234.html -> https://www.domain.de/archive/1234/thread.html

3) https://www.domain.net/forums.html -> https://www.domain.de/archive/index.html


Exoten-Liste:
4) https://www.domain.net/ftopic1234-IrgendeinAnhangmitSonderzeichen.html -> https://www.domain.de/thread.php?threadid=1234

5) https://www.domain.net/ptopic,1234.html#1234 -> https://www.domain.de/thread.php?postid=1234#1234


Rest:
6) Sämtliche Dateien aus dem wbboard-Verzeichnis zum Hauptverzeichnis:
https://www.domain.net/wbboard/ -> https://www.domain.de/

7) Alle übrigen Dateien per 404 nach https://www.domain.de/


Viele Grüße!

Less

Verfasst: 21.04.2006, 14:58
von tobsn

Code: Alles auswählen

<?php

$var = "123lalala";
$var = &#40;int&#41;$var;

if&#40; is_numeric&#40; $var &#41; &#41; &#123;
     echo $var;
&#125;

?>

Verfasst: 21.04.2006, 15:06
von haha
Vornweg:

RewriteEngine on
RewriteBase /

Es wäre nicht verkehrt, example.net und example.de als separate Domains zu führen, dann wäre der ganze Kram wäre sauber getrennt. Ansonsen muss vor jede RewriteRule-Anweisungen die folgende Zeile:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.net$
(Du möchtest sicher auch example.net abfrangen, nicht nur www.example.net, oder?)

1) https://www.domain.net/viewtopic.php?p=1234EvtlIrgendeinAnhang -> https://www.domain.de/thread.php?postid=1234#1234

Siehe oben:

RewriteCond %{QUERY_STRING} (^|&|;)p=([0-9]+)
RewriteRule ^viewtopic.php https://www.example.de/thread.php?postid=%2#%2 [NE,R=301,L]
(Du möchtest wirklich zweimal die gleiche Zahl?)
(Ich nehme mir mal die Freiheit, für Beispiele wie eigentlich vorgesehen example.tld zu benutzen).

2) https://www.domain.net/ftopic1234.html -> https://www.domain.de/archive/1234/thread.html

RewriteRule ^ftopic([0-9]+)\.html https://www.example.de/archive/$1/thread.html [R=301,L]

3) https://www.domain.net/forums.html -> https://www.domain.de/archive/index.html

RewriteRule ^forums\.html https://www.example.de/archive/

Oder bei separaten Hosts:
Redirect permanent /forums.html https://www.example.de/archive/

(Auf index.html verweist man nicht.)

4) https://www.domain.net/ftopic1234-IrgendeinAnhangmitSonderzeichen.html -> https://www.domain.de/thread.php?threadid=1234

RewriteRule ^ftopic([0-9]+)-.*\.html https://www.example.de/thread.php?threadid=$1 [R=301,L]

5) https://www.domain.net/ptopic,1234.html#1234 -> https://www.domain.de/thread.php?postid=1234#1234

RewriteRule ptopic,([0-9]+)\.html https://www.example.de/thread.php?postid=$1 [R=301,L]

Der Anker (# und nachfolgende Zeichen) wird nicht an den Server geschickt, sondern verbleibt beim Browser. Er kann deshalb nicht im Server verarbeitet werden, wird aber (zumindest von meinem Browser) 1:1 auf die neue URL übernommen.

6) Sämtliche Dateien aus dem wbboard-Verzeichnis zum Hauptverzeichnis:
https://www.domain.net/wbboard/ -> https://www.domain.de/

RewriteRule wbboard/ https://www.example.de/ [R=301,L]
was Du Dir hoffentlich gut überlegt hast bzw., falls Du die Pfade mitnehmen willst:
RewriteRule wbboard/(.*) https://www.example.de/$1 [R=301,L]

Oder bei separaten Hosts:
Redirect permanent /wbboard/ https://www.domain.de/

7) Alle übrigen Dateien per 404 nach https://www.domain.de/

Das ist erstens Unfug, weil Du damit die Besucher in die Irre führst, und funktioniert zweitens nicht, weil externe Fehlerdokumente immer mit einer dauerhaften Weiterleitung realisiert werden. Den 404 bekommst Du höchstens, falls die Ziel-URL auch nicht existiert.

Verfasst: 21.04.2006, 16:09
von Less
Wie schon per PN gesagt: Vielen Dank!

Ich habe das ganze nun getestet und es funktioniert einwandfrei!

Ein paar Fragen habe ich allerdings noch:
Was genau bedeuten "NE" und "L" in den eckigen Klammern bei den Rewrite-Rules?

Was verstehst Du unter "separaten Hosts" ?

Und könnte ich Punkt 7 so lösen, dass ich die Dateien bei example.net per htaccess auf example.de umleite und sie dort dann per 404 auf eine Fehlerseite schicke? Wäre das Suchmaschienenfreundlich?

Viele Grüße!
Less

Verfasst: 21.04.2006, 16:36
von 800XE
Less hat geschrieben:Und könnte ich Punkt 7 so lösen, dass ich die Dateien bei example.net per htaccess auf example.de umleite und sie dort dann per 404 auf eine Fehlerseite schicke? Wäre das Suchmaschienenfreundlich?
wieso 404?
ich habs jetzt nicht genau gelesen oder angeschaut ... gehe dafon aus das der Inhalt von .net und .de der selbe ist = die selbe Website

Code: Alles auswählen

RewriteEngine on
RewriteCond %&#123;HTTP_HOST&#125;           ^23ww.de$   &#91;NC&#93;
RewriteRule ^&#40;.*&#41;        http&#58;//www.w23w.de/$1 &#91;L,R=301&#93;
RewriteCond %&#123;HTTP_HOST&#125;    ^www.23ww.de$   &#91;NC&#93;
RewriteRule ^&#40;.*&#41;        http&#58;//www.w23w.de/$1 &#91;L,R=301&#93;
RewriteCond %&#123;HTTP_HOST&#125;           ^w23w.de$   &#91;NC&#93;
RewriteRule ^&#40;.*&#41;        http&#58;//www.w23w.de/$1 &#91;L,R=301&#93;
hier gibts jetzt nur noch die w23w und zwar mit wehwehweh dafor .... die Anderen 3 Adresen werden dorthin redirectet .... per 301 .... nix 404

Verfasst: 22.04.2006, 00:33
von Less
@800XE

Von den Inhalten sind die beiden Seiten gleich, von der Struktur und den Dateinamen her, allerdings nicht.

Viele Grüße! :D

Less

Verfasst: 22.04.2006, 11:48
von haha
Less hat geschrieben:Was genau bedeuten "NE" und "L" in den eckigen Klammern bei den Rewrite-Rules?
NE steht für "no escape"; es sollen also alle Zeichen 1:1 übernommen und nicht %-kodiert werden.
L steht für "last"; passt die jeweilige Regel, werden keine weiteren geprüft. Normalweise werden alle RewriteRule- bzw. RewriteCond-Anweisungen abgearbeitet, so dass man eine URL auch mehrmals pro Durchlauf ändern kann.
Was verstehst Du unter "separaten Hosts" ?
Ein Apache kann verschiedene Hosts verwalten. Jeder Host ist unter mindestens einem Domainnamen erreichbar, man kann jedoch auch dafür sorgen, dass mehrere Domains in ein und demselben Host resultieren. Genau das passiert, wenn Du www.example.com/blafasel aufrufst und das Gleiche erscheint wie beim Aufruf von example.com/blafasel. www.example.com ist dann nicht eigenständig, sondern einfach als Alias, also als weiterer Domainname für example.com eingetragen (oder umgekehrt).

Mit separaten Hosts meine ich, dass www.example.com eben nicht als zusätzlicher Name für example.com eingetragen wird, sondern als echter, eigenständiger Host. Das hat den Vorteil, dass example.com und www.example.com strikt von einander getrennt verwaltet werden und somit auch jeder seinen eigenen Konfigurationsblock hat - was ja letztlich auch nur sinnig ist, da bei example.com etwas anderes passieren soll als bei www.example.com.
Bei separaten Hosts kommst Du Dir mit der unterschiedlichen Behandlung nicht selbst in die Quere und musst insbesondere nicht vor jeder Konfigurationsanweisung entscheiden (lassen), ob die nun für www.example.com oder example.com gilt (zum Beispiel mit RewriteCond %{HTTP_HOST} ^(www\.)?example\.net$)
Und könnte ich Punkt 7 so lösen, dass ich die Dateien bei example.net per htaccess auf example.de umleite und sie dort dann per 404 auf eine Fehlerseite schicke?
Das kommt auf die Datei an. Existiert sie definitiv auch bei der neuen Domain nicht mehr, wäre es nicht verkehrt, gleich an Ort und Stelle einen 404-Fehler auszuspucken. Existiert sie unter neuem Namen, sollte eine entsprechende Weiterleitung erfolgen (was Du ja bei 1-6 machst). Und bei allem, was nicht in diese beiden Gruppen passt, ist die einzig praktikable Lösung, eine 1:1-Weiterleitung auszulösen und die weitere Behandlung dem neuen Server zu überlassen (ohne explizite Prüfung, ob die Anfrage nun via der alten Domain kommt oder nicht).

Dass Du einen 404 ausgibst, muss übrigens nicht bedeuten, dass Du irgendwen im Regen stehen lässt. Es steht Dir ja frei, die Fehlermeldung entsprechend zu verschönern, um den aufgelaufenen Besucher trotzdem zum Ziel zu leiten. Das ist ja vermutlich auch der Sinn der angefragten Weiterleitung zur Startseite. Nur hat die Startseite halt den Nachteil, dass niemand, weder Besucher noch Maschine, etwas von dem Irrlauf erfährt.