Hallo LUG,
heute habe ich mal was für die Apache2-mod_rewrite-Kenner unter euch.
Gegeben ist folgende Ordnerstruktur:
ordner1 ordner1/file1.php ordner2 ordner2/file2.php ordner3 ordner3/sonstigesfile.php index.php
Dies sind immer die Basispfade, also ein Aufruf von http://localhost/ ruft die index.php auf, http://localhost/ordner1/ zeigt die file1.php an.
Nun sollen alle Anfragen die an http://localhost/ordner1/ gehen, automatisch an die Datei file1.php gerichtet werden. Genauso bei http://localhost/ordner2 an file2.php. Anfragen an http://localhost/ordner3/ sollen hingegen nicht an sonstigesfile.php weitergeleitet werden.
Meine Konstruktion sieht nun wie folgt aus:
.htaccess RewriteEngine on RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^![rfp](.*)$ index.php/$1 [L]
ordner1/.htaccess RewriteEngine on RewriteBase /ordner1/ RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ file1.php/$1 [L]
ordner1/.htaccess RewriteEngine on RewriteBase /ordner2/ RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ file2.php/$1 [L]
Gibt es einen besseren Weg, diese Regeln in nur eine .htaccess-Datei zu packen?
Oder als Alternative:
Anfragen an /(.*) -> /index.php/$1 Anfragen an /ordner1/(.*) -> /file1.php/$1 Anfragen an /ordner2/(.*) -> /file2.php/$1
also ohne die Ordner ordner1 und ordner2.
Ich habe schon einiges gegoogelt und experimentiert, doch die oben genannte Möglichkeit war die einzige, die ich hinbekommen habe. Diese ganze URL-Manipulation kann ich auch nur mit .htaccess-Dateien machen, da ich an die httpd.conf nicht ran komme bzw. möchte.
Vielen Dank,
Falk Döring
Hallo,
Rückfrage zum Verständnis: Warum nicht einfach
ordner1 ordner1/file1.php
% echo "DirectoryIndex file1.php" >> ordner1/.htaccess ? Damit werden dann die Parameter, die an /ordner1/ gestellt werden, auch an file1.php übergeben.
Allgemein könntest du auch die Datei /ordner1.php nennen und über /ordner1 aufrufen, sofern - MultiViews eingeschaltet ist - kein Ordner gleichen Namens existiert
Josef
Hallo Josef!
Am Mittwoch, 7. Februar 2007 10:27 schrieb Josef Spillner:
Hallo,
Rückfrage zum Verständnis: Warum nicht einfach
ordner1 ordner1/file1.php
% echo "DirectoryIndex file1.php" >> ordner1/.htaccess ? Damit werden dann die Parameter, die an /ordner1/ gestellt werden, auch an file1.php übergeben.
Nicht ganz. Bei einem Aufruf von http://localhost/ordner1/a/b/d/sss soll /a/b/d/sss an file1.php übergeben und geparsed werden, was bei deiner Methode nicht so ist. Die Datei file1.php kann auch anders heißen, zum Beispiel index.php. Ich will nur nicht so etwas machen müssen: http://localhost/ordner1/file1.php?a=b&d=sss.
Allgemein könntest du auch die Datei /ordner1.php nennen und über /ordner1 aufrufen, sofern
- MultiViews eingeschaltet ist
- kein Ordner gleichen Namens existiert
Das will ich mal lieber nicht machen. Wenn doch mal Dateien hinzu kommen, die fast gleich heißen, gibt es Huddelleien. Mein Ziel ist es das mit den Bootstrap-Dateien file1.php und file2.php zu unterbinden. Mit MultiViews hatte(n wir|ich) schon eigenartige Vorkommnisse. Deshalb lasse ich die Finger davon und wollte mal was anderes versuchen.
Danke für deine Antwort,
Falk
Am Mittwoch, 7. Februar 2007 12:08 schrieb Falk Döring:
Nicht ganz. Bei einem Aufruf von http://localhost/ordner1/a/b/d/sss soll /a/b/d/sss an file1.php übergeben und geparsed werden, was bei deiner Methode nicht so ist. Die Datei file1.php kann auch anders heißen, zum Beispiel index.php. Ich will nur nicht so etwas machen müssen: http://localhost/ordner1/file1.php?a=b&d=sss.
Du könntest natürlich über .htaccess jegliche 404 abfangen und an file1.php übergeben, worin dann die Pfadangabe der Originalanfrage ausgelesen wird.
Wenn das nicht hilft/geht, läuft es wohl doch auf mod_rewrite hinaus, was ich natürlich vermeiden wollte :)
Josef
Am Mittwoch, 7. Februar 2007 12:46 schrieb Josef Spillner:
Am Mittwoch, 7. Februar 2007 12:08 schrieb Falk Döring:
Nicht ganz. Bei einem Aufruf von http://localhost/ordner1/a/b/d/sss soll /a/b/d/sss an file1.php übergeben und geparsed werden, was bei deiner Methode nicht so ist. Die Datei file1.php kann auch anders heißen, zum Beispiel index.php. Ich will nur nicht so etwas machen müssen: http://localhost/ordner1/file1.php?a=b&d=sss.
Du könntest natürlich über .htaccess jegliche 404 abfangen und an file1.php übergeben, worin dann die Pfadangabe der Originalanfrage ausgelesen wird.
Wenn das nicht hilft/geht, läuft es wohl doch auf mod_rewrite hinaus, was ich natürlich vermeiden wollte :)
Ich habe mir schon was dabei gedacht, als ich mit mod_rewrite anfing ;-). Bloß meine Lösung ist mir etwas zu umständlich bzw. ich würde gerne wissen, ob es auch anders geht.
Aber trotzdem Danke für den 404er Hinweis. Ich glaube aber nicht, dass mir das weiterhelfen wird. Da arbeite ich ja wieder nur mit einer Datei welche die 404er abfängt bzw. muss wieder in jeden Ordner eine eigene .htaccess legen.
Tschau,
Falk
Falk Döring schrieb:
Aber trotzdem Danke für den 404er Hinweis. Ich glaube aber nicht, dass mir das weiterhelfen wird. Da arbeite ich ja wieder nur mit einer Datei welche die 404er abfängt bzw. muss wieder in jeden Ordner eine eigene .htaccess legen.
Papoo http://www.papoo.de hat dafür .htaccess-Dateien beigelegt, vielleicht kannst Du die anpassen?
Zur allergrößten Not sollte es tatsächlich mit apache und multiviews gehen. Dann musst Du nur noch den Pfad (PHP-Variable hab ich nicht im Kopf) auswerten.
ein aufruf von http://www.esg-dd.de/index.php/gesichter/index.html hatte jedenfalls seinerzeit wunderbar geklappt. Mit Multiviews solltest Du auch das .php noch entfernen können.
Tobias
Hallo Tobias!
Am Mittwoch, 7. Februar 2007 13:32 schrieb Tobias Schlemmer:
Falk Döring schrieb:
Aber trotzdem Danke für den 404er Hinweis. Ich glaube aber nicht, dass mir das weiterhelfen wird. Da arbeite ich ja wieder nur mit einer Datei welche die 404er abfängt bzw. muss wieder in jeden Ordner eine eigene .htaccess legen.
Papoo http://www.papoo.de hat dafür .htaccess-Dateien beigelegt, vielleicht kannst Du die anpassen?
Ich schau mir das mal an. Danke für den Tipp.
Zur allergrößten Not sollte es tatsächlich mit apache und multiviews gehen. Dann musst Du nur noch den Pfad (PHP-Variable hab ich nicht im Kopf) auswerten.
ein aufruf von http://www.esg-dd.de/index.php/gesichter/index.html hatte jedenfalls seinerzeit wunderbar geklappt. Mit Multiviews solltest Du auch das .php noch entfernen können.
Okay, da muss ich mich vielleicht doch mal mit Multiviews auseinandersetzen.
Tschau,
Falk
Hallo LUG,
und hier die Lösung meines Problems:
ich habe die Dateien file1.php und file2.php aus ordner1 und ordner2 ins root verschoben und die Ordner gelöscht:
.htaccess index.php file1.php file2.php
und in die .htaccess folgendes geschrieben:
RewriteEngine On Options -MultiViews RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^ordner1(.*)$ file1.php/$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^ordner2(.*)$ file2.php/$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php [QSA,L]
Schon klappt alles wie ich will und es ist einfacher zu Handhaben.
Tschau,
Falk
lug-dd@mailman.schlittermann.de