.htaccess überschreibt reale Datei
TCZ27
- html
Servus!
Ich verwende folgde rule in der .htaccess
RewriteCond %{REQUEST_URI} mittweida.php(.*)$
RewriteRule mittweida.php(.*)$ test.php [L]
Soweit sao gut.
Nun verlinke ich auch auf eine real existierende Datei test_mittweida.php
Hier greift die htaccess und obwohl die Datei test_mittweida.php existiert werde ich auf test.php geleitet.
Wie kann ich das lösen?
Grüße, Tom
Ich verwende folgde rule in der .htaccess
RewriteCond %{REQUEST_URI} mittweida.php(.*)$
RewriteRule mittweida.php(.*)$ test.php [L]Soweit sao gut.
Nee.
Ergo:
RewriteRule mittweida.php test.php [L]
Nun verlinke ich auch auf eine real existierende Datei test_mittweida.php
Hier greift die htaccess und obwohl die Datei test_mittweida.php existiert werde ich auf test.php geleitet.
mod_rewrite arbeitet mit URLs und kümmert sich nicht darum, ob irgendwas auf dem Server existiert oder nicht (jedenfalls nicht ohne Aufforderung).
Wie kann ich das lösen?
Wie möchtest du es lösen? Möchtest du, dass die Änderung nur bei nicht existierenden Dateien greift? Oder möchtest du, dass die Änderung nur bei mittweida.php greift?
Ich verwende folgde rule in der .htaccess
RewriteCond %{REQUEST_URI} mittweida.php(.*)$
RewriteRule mittweida.php(.*)$ test.php [L]Soweit sao gut.
Nee.
- Die RewriteCond-Zeile ist restlos überflüssig. Du prüfst bereits mit RewriteRule, ob die URL mittweida.php enthält, dann musst du das nicht nochmal mit RewriteCond wiederholen.
- Den Punkt vorm "php" möchtest du doch sicher als Punkt erkannt haben. Also maskiere ihn, damit er nicht seine normale Funktion als Platzhalter übernimmt: "mittweida.php".
- Wenn du nichts aus dem Muster übernehmen möchtest, musst du auch keine runden Klammern setzen.
- .*$ kannst du genauso gut gänzlich weglassen, denn "irgendwas und Ende" ist dasselbe wie "offenes Ende".
Ergo:
RewriteRule mittweida.php test.php [L]
Nun verlinke ich auch auf eine real existierende Datei test_mittweida.php
Hier greift die htaccess und obwohl die Datei test_mittweida.php existiert werde ich auf test.php geleitet.
mod_rewrite arbeitet mit URLs und kümmert sich nicht darum, ob irgendwas auf dem Server existiert oder nicht (jedenfalls nicht ohne Aufforderung).
Wie kann ich das lösen?
Wie möchtest du es lösen? Möchtest du, dass die Änderung nur bei nicht existierenden Dateien greift? Oder möchtest du, dass die Änderung nur bei mittweida.php greift?
Ich möchte dass die Änderung nur bei mittweide.php greit, das aber bei z.B. test_mittweide.php die real existierende Datei auf dem Server verwendet wird.
Mahlzeit,
TUFO bzw. FOTU ist nicht viel besser als TOFU - bitte zitiere nur das, auf das Du auch antwortest. Danke.
Ich möchte dass die Änderung nur bei mittweide.php greit, das aber bei z.B. test_mittweide.php die real existierende Datei auf dem Server verwendet wird.
Dazu sollte die Regel nur angewendet werden, wenn die angeforderte Datei nicht existiert:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule mittweida\.php test.php [L]
Generell würde ich Dir die Lektüre des Apache URL Rewriting Guide empfehlen.
MfG,
EKKi
Ich möchte dass die Änderung nur bei mittweide.php greit, das aber bei z.B. test_mittweide.php die real existierende Datei auf dem Server verwendet wird.
Dazu sollte die Regel nur angewendet werden, wenn die angeforderte Datei nicht existiert:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule mittweida.php test.php [L]
Wenn sie nur bei mittweida.php greifen soll, dann geht das noch kürzer und schneller:
RewriteRule ^mittweida\.php$ test.php [L]
Der eigentliche Fehler im Original war also, dass zwar ein festes Ende vorgesehen war ($), aber kein fester Anfang (^).
Vor RewriteRule in einer .htaccess sollte übrigens immer eine RewriteBase-Zeile stehen, die die URL zum jeweiligen Verzeichnis angibt, und sei es nur "RewriteBase /".