Verständnissprobleme bei mod_rewrite
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
apache
break
code
datei
form
gruppe
helfen
http
index
kontakt
leistung
modul
page
referenz
sache
server
start
url
verstehen
zeichen
-
Hallo Limera,
ich habe die Befürchtung, dass ich mod_rewrite gar nicht verstanden habe.
zur zeit sieht meine Datei so aus:
RewriteEngine on RewriteRule ^start\.html$ index.php?ct=start RewriteRule ^wir\.html$ index.php?ct=wir RewriteRule ^leistungen\.html$ index.php?ct=leistungen RewriteRule ^aktuell\.html$ index.php?ct=aktuell RewriteRule ^notruf\.html$ index.php?ct=notruf RewriteRule ^referenzen\.html$ index.php?ct=referenzen RewriteRule ^lexikon\.html$ index.php?ct=lexikon RewriteRule ^sitemap\.html$ index.php?ct=sitemap RewriteRule ^kontakt\.html$ index.php?ct=kontakt RewriteRule ^impressum\.html$ index.php?ct=impressum RewriteRule ^add_news\.html$ index.php?ct=add_news
Allgemeiner könnte ich das ja dann auch so schreiben:
RewriteRule ^(.*)\.html$ index.php?ct=$1
Bewirkt das Gleiche nur in einer Zeile. Wenn ich jetzt also die Datei start.html aufrufe macht mein Server index.php?ct=start
CT wird in einer PHP datei so verwertet:
switch ($ct) { case 'wir':{ //Hauptkategorie include('wir.php'); break; } case 'leistungen':{ //Hauptkategorie include('leistungen.php'); break; } }
Wie aber verwende ich nun soetwas?
index.php?ct=$1&secct=$2
Sagen wir der Link soll einen Logout bewirken und dann auf die gleiche Seite weiterleiten.
Ich befinde mich also auf der Seite aktuell und logge mich aus... dann soll ct = aktuell und secct= logout sein.
Würde das nicht eigentlich auch so funktionieren?
RewriteRule ^logout\/(.*)\.html$ index.php?ct=$1&secct=logout
Ich blick da nicht so ganz durch... weil wenn ich diese Anfrage stelle, leitet der zwar irgendwie weiter aber nicht so wie ich mir das vorstelle... zu sehen gibt's das Problem auf der Seite www.ed-immo.webdiggi.de/hp/aktuell.html, wenn man dort auf den Link klickt.
Würde mich freuen, wenn mir da jemand helfen könnte.
Grüße
technofan
Beitrag zuletzt geändert: 30.1.2012 10:54:47 von technofan -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
technofan schrieb:
Wo ist dort der Link mit dem logout?
zu sehen gibt's das Problem auf der Seite www.ed-immo.webdiggi.de/hp/aktuell.html, wenn man dort auf den Link klickt. -
es ist nicht der mit Logout gemeint... es ist der mit der "Newsüberschrift" gemeint... das mit Logout war nur ein Beispiel.
Erscheinen sollte eben diese Seite:
http://ed-immo.webdiggi.de/hp/index.php?ct=read_news&secct=1
aber es erscheint eine andere, die zwar eigentlich die Kategorie enthält aber nicht die komplette Seite -
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)\.html$ index.php?ct=$2&secct=$1 [L,QSA] -
sneppa schrieb:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)\.html$ index.php?ct=$2&secct=$1 [L,QSA]
aso ok... joa hmmm... und gibt's dazu auch ne Erklärung wieso das so ist?
und was mach ich, wenn ich mal ne andere URL Form zusätzlich brauche? Muss ich dann einfach nur eine zweite Regel anlegen? -
RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)\.html$ index.php?ct=$2&secct=$1 [L,QSA]
Naja (.[^/|\.]*) ist ja die Variable die wir suchen.
Da wir eine vor dem Slash suchen und eine nach dem Slash sieht es dann so aus:
^(.[^/|\.]*)/(.[^/|\.]*)
Und da am Ende ja das .html stehen muss noch das dran:
^(.[^/|\.]*)/(.[^/|\.]*)\.html$
Da der erste Wert die Variable $1 ist und der zweite die $2 müssen wir diese nur noch in die gewünschte URL einsetzen:
index.php?ct=$2&secct=$1
Für jede weitere URL Form gibt es eine neue Regel.
Die werden einfach unten drunter geschrieben.
Bsp. von einem Projekt bei mir:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^(.[^/|\.]*)[/]?$ index.php?language=$1 [L,QSA] RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)?$ index.php?language=$1&module=$2 [L,QSA] RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)/(.[^/|\.]*)?$ index.php?language=$1&module=$2&action=$3 [L,QSA]
-
und was macht man, wenn ich jetzt den Fall habe?
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)?$ index.php?language=$1&module=$2 [L,QSA] RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)?$ index.php?data=$1&content=$2 [L,QSA]
woher weiß der Server dann, welches er nehmen soll?
es kann ja durchaus mal vorkommen, dass ich die Get_Variablen in der ersten Regel nicht verwenden darf, weil die schon anderweitig gebraucht werden...
und was die Sachen in den [...] alles bewirken hab ich auch noch nicht so ganz verstanden...
ich kenne eben nur die Sachen von modrewrite.de und das ist doch recht dürftig und die Page von apache auf der das erklärt ist, finde ich doch recht unübersichtlich und teils auch blöd erklärt...
Beitrag zuletzt geändert: 1.2.2012 15:49:55 von technofan -
technofan schrieb:
und was die Sachen in den [...] alles bewirken hab ich auch noch nicht so ganz verstanden...
Die komplette Regex: [^/|\.]
Hoffe das war hilfreich![ Anfang der Zeichen-Gruppe ^ Verneinung des nachfolgenden Ausdrucks / Der normale Slash | ODER-Verknüpfung \. Escape-Sequenz für den normalen Punkt ] Ende der Zeichen-Gruppe
ich kenne eben nur die Sachen von modrewrite.de und das ist doch recht dürftig und die Page von apache auf der das erklärt ist, finde ich doch recht unübersichtlich und teils auch blöd erklärt...
Gebe ich dir vollkommen recht. Was dir helfen könnte, die kryptischen Kombinationen aus Sonderzeichen zu verstehen, wäre, sich ein wenig in Regex (Reguläre Ausdrücke) einzulesen. Die Mod-Rewrite-Syntax baut nämlich auf dieser auf. Wikipedia hat die wichtigsten Funktionen erklärt: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
Zusätzlich gibts noch eine kurze Erklärung von SELFhtml (wird aber in etwa midrewrite.de entsprechen): http://de.selfhtml.org/servercgi/server/rewrite.htm
Ansonsten hilft es, sich nen Nachmittag zeitzunehmen und die Apache-Konfiguration in Ruhe durchlesen, ausprobieren und verstehen. Keine Sorge, das schaffst du auch!
Edit (zum eigtl Thema):
Wonach entscheidet sich denn, welches der beiden genommen werden soll?
Beitrag zuletzt geändert: 2.2.2012 1:33:36 von biolauri -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage