kostenloser Webspace werbefrei: lima-city


Verständnissprobleme bei mod_rewrite

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    technofan schrieb:
    zu sehen gibt's das Problem auf der Seite www.ed-immo.webdiggi.de/hp/aktuell.html, wenn man dort auf den Link klickt.
    Wo ist dort der Link mit dem logout?
  4. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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

  5. RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteRule ^(.[^/|\.]*)/(.[^/|\.]*)\.html$ index.php?ct=$2&secct=$1 [L,QSA]
  6. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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?
  7. 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]
  8. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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
  9. technofan schrieb:
    und was die Sachen in den [...] alles bewirken hab ich auch noch nicht so ganz verstanden...

    Die komplette Regex: [^/|\.]
    [   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
    Hoffe das war hilfreich!


    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
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!