Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » Server-Administration » mod_rewrite & Unterordner Antworten
mod_rewrite & Unterordner

LordAvalon
Pixelschubser


Beiträge: 8


Hallo Leute!
Hoffe, ihr könnt mir helfen.
Meine Seite ist erstmal die index.php . Mit $_GET wird $id und $id2 übertragen. $id steht für den Namen der Datei, die im Hauptteil includet wird und $id2 für den Ordnernamen. Das klappt auch alles soweit: Wenn ich index.php?id=bla&id2=blub aufrufe, wird die Datei blub/bla.php includet. Wenn $id2 nicht übermitelt wird, wird die Datei bla.php aufgerufen.

Nun habe ich in meine .htaccess folgendes geschrieben:

RewriteEngine on
RewriteRule ^(.*)\.html$ index.php?id=$1

Wenn ich nun die Datei bla.html aufrufe, wird index.php?id=bla aufgerufen.

Wenn ich diesen Code nehme...

RewriteEngine on
RewriteRule ^(.*)/(.*)\.html$ index.php?id=$2&id2=$1

... werden die Daten in den Unterordnern prima includet, jedoch funktionieren die Links auf die Daten im gleichen Ordner nicht mehr.

Es soll aber beides funktionieren. Dazu muss also erkannt werden, ob mit $id2 eine Variable übergeben wird. Sollte das nicht der Fall sein, soll die Datei, die sich im gleichen Ordner befindet, aufgerufen werden. Wenn sie übergeben wird, dann die Datei id2/id.php .

Wie mache ich das ? Oder gibt es noch andere Methoden, das zu schaffen ?

  Profil   Editieren   Zitieren

einstein
Quasselstrippe


Beiträge: 241


@mod: in Forum Server-Administration schieben.

In deiner Regular Expression ist folgender Haken:
. steht für jedes beliebige Zeichen als auch ein /, demzufolge macht es wenig Sinn
mit
(jedes beliebige zeichen) / (jedes beliebige zeichen) zu arbeiten.

Siehe auch hier

Diese Nachricht wurde geändert von: einstein
  Profil   Editieren   Zitieren

LordAvalon
Pixelschubser


Beiträge: 8


Dank für die schnelle Antwort !

Aber ich brauche doch den Slash als Trennzeichen zwischen Ordnername und Filname.... Wie soll ich das denn genau sonst machen ?

  Profil   Editieren   Zitieren

einstein
Quasselstrippe


Beiträge: 241


Wenn du die links gelesen hättest....
hättest du herausgefunden, dass
du das (.*) bspw. mit
([A-Za-z0-9_]+)
ersetzen könntest

  Profil   Editieren   Zitieren

LordAvalon
Pixelschubser


Beiträge: 8


Ich habe die Links gelesen gehabt. Und ich habe auch das (.*) ersetzt. Aber es funktioniert genauso wie vorher.

Die erstellten HTML Daten in den Unterordnern funktionieren, aber die im gleichen Ordner nicht.

  Profil   Editieren   Zitieren

einstein
Quasselstrippe


Beiträge: 241


Dann brauchst du eben 2 Regeln:
1: 
2: 
3: 
4: 
5:
RewriteEngine on
RewriteRule ^([A-Za-z0-9_]+).html$ index.php?id2=$1 
RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]+).html$ index.php?id=$2&id2=$1


Evtl verstehe ich dein Problem auch nicht ganz: Was bedeutet
jedoch funktionieren die Links auf die Daten im gleichen Ordner nicht mehr.

  Profil   Editieren   Zitieren

LordAvalon
Pixelschubser


Beiträge: 8


Danke, danke, danke !!

Jetzt klappt es doch ! Hab da wohl irgendwas doch falsch gemacht.

Hab aber noch eine Frage:
Wenn ich nun die Seite index.php?id=bla&id2=$blub durch den Verweis blub/bla.html aufgerufen wird, können logischerweise die Grafiken nicht mehr angezeigt werden, da sich der relative Pfad geändert hat. Die Grafiken befinden sich im Ordner "../images/" und nicht "/images/" .

Wie kriege ich das hin, dass die Grafiken und Links richtig verlinkt sind ?

EDIT:
Hab gerade gemerkt, dass das jetzt logischerweise mit allen Links der Fall ist, da der relative Pfad sich überall verändert hat, aber im Quelltext gleichgeblieben ist.

Diese Nachricht wurde geändert von: LordAvalon
  Profil   Editieren   Zitieren

Philipp Gérard
Foren-Team


Beiträge: 1508


absolute links benutzen

---
Arbeit ist das Feuer der Gestaltung. - Marx

  Profil   E-Mail   Website   Editieren   Zitieren

LordAvalon
Pixelschubser


Beiträge: 8


gibts da keine andere alternative ?

  Profil   Editieren   Zitieren

Can
Halbgott


Beiträge: 1330


LordAvalon schrieb am 17.02.2004 15:54
gibts da keine andere alternative ?


Keine gute. Setz den absoluten Pfad (http://domainname.de/) doch als Konstante (mit global), oder Umgebungsvariable (putenv) ...

---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox

  Profil   E-Mail   Editieren   Zitieren

LordAvalon
Pixelschubser


Beiträge: 8


Hab ich gemacht und es klappt alles

Hab aber eine andere Frage: Oben steht ja der Code für die .htacces bei einem Unterordner.

Wenn ich jetzt noch einen Unterordner im Unterordner habe, müsste das ganze dann ja so aussehen:

1:
RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([A-Za-z0-9_]+).html$ index.php?id=$2&id2=$1&id3=$3


(wenn $id2/$id/$id3.html aufgerufen werden soll.)

Nur klappt es irgendwie nicht ... Seht ihr darin ein Fehler ?

In meiner index.php, hab ich an der Stelle, wo es darauf ankommt, was includet wird, folgendes stehen:

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29:
<?php
$id = $_GET["id"];
$id2 = $_GET["id2"];
$id3 = $_GET["id3"];

$DEFAULT = "startseite.php";
$ERROR = "404.php";
$inc = "";

if ($id && $id2) {
  if (file_exists("$id2/$id.php")) $inc = "$id2/$id.php";
  else $inc = $ERROR;
  
} else if ($id && $id2 && $id3) {
  if (file_exists("$id2/$id/$id3.php")) $inc = "$id2/$id/$id3.php";
  else $inc = $ERROR;
  
} else if ($id) {
  if (file_exists("$id.php")) $inc = "$id.php";
  else $inc = $ERROR;

} else {
  $inc = $DEFAULT;
}

include($inc);
?>


Oder ist darin ein Fehler ?

  Profil   Editieren   Zitieren
 

Antworten
Nach oben