Rewrite: Optional Verzeichnis/Dateiendung
tomgk
- webserver
Hallo!
Warum funktioniert das nicht?:
RewriteRule ^(^.*/)([^/]*)(..*)$ index.php?dir=$1&site=$2&typ=$3 [L]
Wenn man "dir/file.ext", "dir/.ext" oder "" (weil dann sowiso index.php aufgerufen wird) eingibt funktionierts ansonsten nicht.
404 bei
-"dir/file"
-"file.ext"
-"file" (ohne Dateiendung)
-".ext" (Nur Dateiendung)
Zur erklärung:
Im 1. soll der Verzeichnisname gespeichert werden, im 2. der Dateiname und im 3. die Dateiendung.
Würde man alle Möglichkeiten aufschreiben wären das 6 Kombinationen, also 6 Regeln.
Mir wäre lieber nur eine Regel die all das erfüllt.
Wo liegt der Fehler in der Rewrite-Regel?
MfG
tomgk
Hallo!
Hab jetzt die Regel fertig:
RewriteRule ^(^.*/)([^/.]*)(.|)(.*)$ index.php?dir=$1&site=$2&typ=$4 [L]
Stimmt sie oder gibts noch Fehler?
MfG
tomgk
Hab jetzt die Regel fertig:
RewriteRule ^(^.*/)([^/.]*)(.|)(.*)$ index.php?dir=$1&site=$2&typ=$4 [L]
Warum du zwei Mal ^ - also Beginn der Zeichenkette - hintereinander notierst, wird mir nicht ganz klar.
404 bei
-"dir/file"
Das dürfte wohl nicht erfüllt sein. Geht es eigentlich immer nur um eine Verzeichnisebene oder auch mehrere? Also foo/bar/file.ext
ich würde da eher
RewriteRule ^(.*/)(?:([^/.]*).([a-z]{2,4}))?$ index.php?dir=$1&site=$2&typ=$3 [L]
nutzen (RegEx ab apache 2.0, sonst musst du ?: entfernen und die letzte backreference auf $4 ändern).
Matched auf
foo/.ext
foo/bar.ext
foo/
(auch foo/bar/.ext etc.)
Hallo!
ich würde da eher
RewriteRule ^(.*/)(?:([^/.]*).([a-z]{2,4}))?$ index.php?dir=$1&site=$2&typ=$3 [L]
nutzen (RegEx ab apache 2.0, sonst musst du ?: entfernen und die letzte backreference auf $4 ändern).
Das funktionier ja nur bei */*.* also nur mit Punkt und Slash, oder?
Ich möchte es aber mit und ohne Punkt/Slash. (Was beteutet das "?:" ?)
Hab eine andere Regel:
RewriteRule ^(.*/|)([^/.]*)(.|)(.*)$ index.php?dir=$1&name=$2&typ=$4 [L]
Ohne dem | funktionierts nicht. Gibts da bessere Vorschläge?
MfG
tomgk
RewriteRule ^(.*/)(?:([^/.]*).([a-z]{2,4}))?$ index.php?dir=$1&site=$2&typ=$3 [L]
Das funktionier ja nur bei */*.* also nur mit Punkt und Slash, oder?
auch bei
*/*.*
*/.*
*/
(s. oben).
Ich möchte es aber mit und ohne Punkt/Slash. (Was beteutet das "?:" ?)
Ein Fall ozhne Punkt/Slash ("file") soll doch gerade nach dem 1. Posting nicht passen?
?: -> es wird keine Backreference erstellt.
Hab eine andere Regel:
RewriteRule ^(.*/|)([^/.]*)(.|)(.*)$ index.php?dir=$1&name=$2&typ=$4 [L]
Wolltest du nicht, dass in den vier Fällen die Regel eben nicht passt? So habe ich zumindest "404 bei..." im 1. Posting gedeutet.
404 bei
-"dir/file"
-"file.ext"
-"file" (ohne Dateiendung)
-".ext" (Nur Dateiendung)
Deine regEx passt auch auf diese Fälle.