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(INFO_VARIABLES); // 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