Seite 1 von 1

mod_rewrite frage

Verfasst: 11.05.2006, 11:36
von Metaman
ich steh gerade etwas aufdem Schlauch.
und zwar hab ich mein phpbb runtergeschmissen und an dessen Stelle ein anderes Forum installiert und auch schon die Beiträge übernommen.

da das PHPBB schon einige bei google gelistete Beiträge hatte leite Links mit einer htaccess um

Code: Alles auswählen

RewriteEngine on
RewriteCond %{REQUEST_URI} (.*)$
RewriteRule viewforum.php(.*) /index.php$1 [R]
RewriteRule viewtopic.php(.*) /ndex.php$1 [R]
die Index. ist dann so aufgebaut

Code: Alles auswählen

if($f){
header("Status: 301 Moved Permanently");
header("Location:forum.php?req=main&id=$f");
exit;
}

if($t){
header("Status: 301 Moved Permanently");
header("Location:forum.php?req=thread&id=$t");
exit;
}
if($p){
header("Status: 301 Moved Permanently");
header("Location:forum.php?req=thread&postid=$p");
exit;
}
header("Location:forum.php");
Klappt soweit auch prima, nur sind vom phpbb noch andere Dateien gelistet die ich jetzt gerne auf die index.php umleiten möchte die ich aber nicht alle einzeln definieren will.

Also nach diesen 2 Rewrite Regeln brauch ich noch eine Dritte
die alles auf die index.php umleitet
außer die index.php, und die forum.php

Verfasst:
von

Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Re: mod_rewrite frage

Verfasst: 12.05.2006, 10:46
von haha
> RewriteEngine on

Hier fehlt vermutlich [url=file:///D:/http/apache2/manual/mod/mod_rewrite.html#rewritebase]RewriteBase[/url].

> RewriteCond %{REQUEST_URI} (.*)$

Das macht keinen Sinn. RewriteCond ist dazu gedacht, eine Bedingung (Cond = condition) einzubauen, die erfüllt sein muss, damit die nachfolgende RewriteRule-Zeile ausgeführt wird. (.*)$ passt auf alles, Du kannst die Zeile also genauso gut weglassen.
Du verwendest das gefilterte Stückchen auch nicht weiter, die Klammern wären also auch überflüssig (wenn nicht eh schon die ganze Zeile überflüssig wäre).

> RewriteRule viewforum.php(.*) /index.php$1 [R]
> RewriteRule viewtopic.php(.*) /ndex.php$1 [R]

Nur als Anmerkung: Für die zweite Zeile gilt Dein RewriteCond von oben schon nicht mehr.

> if($f){
> header("Status: 301 Moved Permanently");
> header("Location:forum.php?req=main&id=$f");

Location benötigt eine vollständige URL, also in diesem Fall beginnend mit http://. Ich weiß nicht, ob PHP das selbst korrigiert (PHP korrigiert ja viele Schlampereien), aber schöner wäre es, wenn's gleich richtig im Code stehen würde.

Wo kommt $f her, steht das in der URL? Dann benutze $_GET["f"] und schalte register_globals, also die Übernahme von URL-Parametern in eigene PHP-Variablen ab, Du reißt Dir damit unter Umständen ein Sicherheitsloch in Deine Skripte.

Zum Thema:
Du möchtest also viewtopic.php bzw. viewforum.php mit Parameter…
- f in forum.php?req=main&id=[f]
- t in forum.php?req=thread&id=[t]
- p in forum.php?req=thread&postid=[p]
- ohne Parameter in forum.php
… umwandeln?

Mach's so:

RewriteCond %{QUERY_STRING} (^|&|;)f=([^;&]*)
RewriteRule view(forum|topic)\.php forum.php?req=main&id=%2 [R=301,L]

RewriteCond %{QUERY_STRING} (^|&|;)t=([^;&]*)
RewriteRule view(forum|topic)\.php forum.php?req=thread&id=%2 [R=301,L]

RewriteCond %{QUERY_STRING} (^|&|;)p=([^;&]*)
RewriteRule view(forum|topic)\.php forum.php?req=thread&postid=%2 [R=301,L]

RewriteCond %{QUERY_STRING} ^$
RewriteRule view(forum|topic)\.php forum.php

Eventuell kann man die vier Anweisungen auch noch verfeinern, aber ich kenne die phpbb-URLs nicht.

Die index.php, in der Du bis jetzt die eigentliche Umwandlung vornimmst, kannst Du in jedem Fall löschen. Durchaus geschickt könnte es auch sein, die index.php durch forum.php zu ersetzen und somit die URL zu verkürzen (nicht, dass Du eine hässliche Konstruktion in der Art /forum/forum.php benutzt). Die obigen Regeln müssten dann angepasst werden.

Es wäre auch nicht verkehrt, statt der eh für diesen Zweck nicht gedachten URL-Parameter auf Pfade umzustellen, also die phpbb-URLs in forum/[thread]/[posting]/ o. ä. umzuwandeln und anschließend forum/[thread]/[posting]/ in forum.php?postid=usw.
Klappt soweit auch prima, nur sind vom phpbb noch andere Dateien gelistet die ich jetzt gerne auf die index.php umleiten möchte die ich aber nicht alle einzeln definieren will.

Also nach diesen 2 Rewrite Regeln brauch ich noch eine Dritte
die alles auf die index.php umleitet
außer die index.php, und die forum.php
Welche "anderen Dateien"? Eine Weiterleitung, die alles plattmacht und auf eine Indexseite leitet, ist selten eine gute Idee.