Seite 1 von 1

mod rewrite

Verfasst: 25.08.2008, 14:55
von swordi
hallo,

check das mod_rewrite zeugs nicht wirklich. vielleicht kann mir hier jemand helfen.

ich habe folgende verzeichnisse:

/
/maps
/css
index.php
/mobil
/xxx

und ich möchte jetzt urls in der form von

domain.com/maps/produkte/bier

benutzen

in maps/index.php möchte ich alles was nach /maps/ kommt als variable bekommen um das dann zu parsen und damit etwas lustiges zu machen

also nochmal kurz zusammengefasst

alles was nach maps/ kommt soll in einer variable in der index.php verfügbar sein


danke schonmal für eure hilfe

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

Jetzt anfragen: 0511 / 300325-0.


Re: mod rewrite

Verfasst: 25.08.2008, 16:21
von Mork vom Ork
swordi hat geschrieben:/maps/produkte/bier

in maps/index.php möchte ich alles was nach /maps/ kommt als variable bekommen [Ausnahme: /maps/css/]
In /maps/.htaccess:

Code: Alles auswählen

RewriteEngine on
RewriteBase /maps
RewriteCond %{SCRIPT_FILENAME} !/index\.php$
RewriteCond %{REQUEST_URI} !^/maps/css/
RewriteRule (.*) index.php?url=$1
Mit der RewriteRule-Zeile werden pauschal alle Anfragen (das Muster .* passt auf alles) umgeschrieben in index.php?url=$1, wobei $1 für den Inhalt der ersten runden Klammer im Muster steht, hier also der angefragte Pfad. Dem Aufruf von index.php wird somit der angefragte Pfad als Parameter url übergeben, /maps/bla/fasel würde intern als /maps/index.php?url=bla/fasel verarbeitet werden.
In index.php findest du diesen Parameter in der Variablen $_GET["url"] wieder.

Nachdem eine URL vollständig bearbeitet wurde, wird eine neue, serverinterne Anfrage gestartet. Die erste RewriteCond-Zeile sorgt dafür, dass diese interne Anfrage nicht nochmals umgeschrieben wird.
Die zweite RewriteCond-Zeile sorgt auf die gleiche Weise dafür, dass Anfragen an dein css/-Verzeichnis ebenfalls unberührt bleiben.

Und nur zur Abwechslung von dem ewigen mod_rewrite-Kram:

In /.htaccess:

Code: Alles auswählen

<Files maps>
AcceptPathInfo on
ForceType application/x-httpd-php
</Files>
In der Datei /maps (genau so, nur die vier Buchstaben, ohne Endung):

Code: Alles auswählen

<?php
phpinfo&#40;INFO_VARIABLES&#41;; // nur als Beispiel
?>
Mit diesem Aufbau erreicht man fast (siehe unten) das Gleiche wie mit obigem mod_rewrite-Konstrukt. Die Datei maps wird mittels ForceType als PHP-Skript deklariert, AcceptPathInfo on sorgt dafür, dass Pfad-Anhängsel an einen Dateinamen akzeptiert und an das Objekt übergeben werden.
Beim Aufruf von /maps/schnurz wird daher die Datei maps als PHP-Skript ausgeführt, in ihm lässt sich eine Variable namens $_SERVER["PATH_INFO"] abfragen, sie enthält den Wert "/schnurz", d.h. den angehängten Pfadteil.

Es gibt allerdings einen Unterschied zur mod_rewrite-Lösung: Da maps jetzt ein Skript ist und kein Verzeichnis, lässt sich logischerweise auch kein Unterverzeichnis maps/css/ mehr anlegen. Der Inhalt dieses Verzeichnisses müsste aus dem Skript heraus generiert werden, deshalb ist diese Lösung hier nur die zweitbeste. Sie zeigt aber trotzdem schön, dass es ein Leben jenseits mod_rewrite gibt.

Details zu allen Optionen: https://httpsd.apache.org/docs/2.2/mod/ ... rence.html

Verfasst: 26.08.2008, 08:22
von swordi
hey

danke schonmal für die ausführliche antwort,

hab das jetzt so versucht. klappt teilweise so wie es sollte ;-)

das problem hab ich jetzt, dass er alles richtig umleitet, jedoch da dann irgendwie die pfade nimmer stimmen, da er kein css ( und images und js ) mehr lädt.

weißt du evtl noch wie ich das verhindern kann???

Verfasst: 26.08.2008, 09:03
von Southmedia
Die Pfade zum CSS, images und so weiter absolut einbinden (also mit Domainname) oder relativ zum Root, statt relativ zur Datei.

Verfasst: 26.08.2008, 09:12
von Mork vom Ork
Southmedia hat geschrieben:Die Pfade zum CSS, images und so weiter absolut einbinden (also mit Domainname) oder relativ zum Root, statt relativ zur Datei.
Niemals zu einer Seite gehörige URLs mit Domain eintragen, sofern es nicht absolut unumgänglich ist - es ist unnötig und macht bestenfalls irgendwann mal einen Haufen Arbeit. Das Referenzieren als absoluter Pfad, also zB /maps/css/bla.css statt css/bla.css (führenden Schrägstrich beachten, kennzeichnet das Wurzelverzeichnis), reicht vollkommen.

Verfasst: 26.08.2008, 09:30
von swordi
hmm hab jetzt mal alle pfade umgestellt

die sollten eigentlich passen, da mir die developer toolbar die eingebunden js files richtig anzeigt.

aber bekomme jetzt javascript fehler - sehr komisch - also irgendwas ist da noch nicht so ganz richtig ;-)

aber danke für eure hilfe.

Verfasst: 26.08.2008, 09:50
von swordi
so vielleicht könnt ihr mir jetzt nochmal helfen
aktuell sieht meine htaccess so aus

RewriteEngine on

RewriteBase /vulkanland/maps/
RewriteCond %{SCRIPT_FILENAME} !/index\.php$
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/css/
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/js/
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/images/
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/images/cat
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/icons/
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/xml/
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/includes/
RewriteCond %{REQUEST_URI} !^/vulkanland/maps/print.php

RewriteRule (.*) index.php?vars=$1


wenn ich xxxx/maps/asdfasdf mach, dann passt alles so wie es sein soll - bekomme in $vars dann asdfasdf und alles funktioniert perfekt

wie kann ich es jetzt noch machen, dass ich xxx/maps/asdf/asdf schreiben kann
und er mir trotzdem alles auf index.php mappt???

im moment bekomm ich dann wieder alles falsche pfade, weil er /asdf/ überall dazufügt

danke für eure hilfe

lg

Verfasst: 26.08.2008, 10:18
von swordi
hat sich alles aufgelöst
musste die pfade nachbessern - jetzt sollts aber gehn und ich weiß halbwegs wie ;-)

danke für die hilfe