mod_rewrite Rule
Phil
- webserver
In der .htaccess werden alle html-seiten intern auf eine
Index.php weitergeleitet und ausgewertet.
RewriteEngine on
RewriteRule ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html
Nun soll die index.php nicht direkt aufrufbar sein.
RewriteEngine on
RewriteRule ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html
RewriteRule ^.*.html$ /error404.php?
funktioniert natürlich nicht. Ich habe diverse Flags ohne
Erfolg getestet.
Man könnte die 404 Weiterleitung z.B überspringen, wenn
Rule 1 zutrifft.
Was muss man eintragen für eine art if - else Abfrage?
kann ich mit mod_rewrite auch intern auf ein dem ROOT
übergeornetes Verzeichniss verweisen?
Nun soll die index.php nicht direkt aufrufbar sein.
RewriteRule ^.*.html$ /error404.php?
Warum sehe ich hier .html ?
funktioniert natürlich nicht. Ich habe diverse Flags ohne
Erfolg getestet.
Man könnte die 404 Weiterleitung z.B überspringen, wenn
Rule 1 zutrifft.
Was muss man eintragen für eine art if - else Abfrage?
Wenn eine Regel intern angewendet werden soll, ist [L] der das richtige Flag.
kann ich mit mod_rewrite auch intern auf ein dem ROOT
übergeornetes Verzeichniss verweisen?
Nein. Mod_rewrite Zugriffe sind http Zugriffe. Das heisst, auch sie unterliegen .htaccess Regeln.
mfg Beat
Warum sehe ich hier .html ?
Heißt natürlich:
RewriteRule ^.*\index.php$ /error404.php?
Wenn eine Regel intern angewendet werden soll, ist [L] der das richtige Flag.
Habe ich versucht, ich komme immer auf sie 404-Seite. Kannst Du ein Beispiel
machen?
Phil
Hi,
RewriteRule ^.*\index.php$ /error404.php?
Wenn eine Regel intern angewendet werden soll, ist [L] der das richtige Flag.
Habe ich versucht, ich komme immer auf sie 404-Seite.
Natürlich, weil auch jeder umgeschriebene Request erneut durch die komplette Maschinerie geschickt wird - und damit wird dein zuvor auf index.php?irgendwas umgeschriebener Request hier dann auf die 404-Seite umgeschrieben.
Das Flag [L] sorgt lediglich dafür, dass die Anwendung nachfolgender Regeln im aktuellen Durchgang nicht mehr erfolgt, es verhindert aber mitnichten den nächsten Durchgang.
MfG ChrisB
Natürlich, weil auch jeder umgeschriebene Request erneut durch die komplette Maschinerie geschickt wird - und damit wird dein zuvor auf index.php?irgendwas umgeschriebener Request hier dann auf die 404-Seite umgeschrieben.
Das Flag [L] sorgt lediglich dafür, dass die Anwendung nachfolgender Regeln im aktuellen Durchgang nicht mehr erfolgt, es verhindert aber mitnichten den nächsten Durchgang.
»»
Ok, soweit ist mir das jetzt klar. Was ist mit dem NS (No Subrequest) Flag?
Werde ich morgen früh testen.
Danke,
Phil
Vom Prinzip:
RewriteRule ^.*index.php$ /error404.php?
falls Bedingung nicht zutrifft:
RewriteRule ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html
bei www.example.de/index.html soll man auf die Seite kommen,
bei www.example.de/index.php auf die Fehlerseite.
RewriteRule ^.*index.php$ /error404.php?
falls Bedingung nicht zutrifft:
RewriteRule ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html
bei www.example.de/index.html soll man auf die Seite kommen,
bei www.example.de/index.php auf die Fehlerseite.
Du willst also, dass Apache bei seinem Versuch, deine Umleitung zu realisieren, auf ein 404 trifft?
Macht keinen Sinn.
Du kannst eventuell mit RewriteCond abfragen ob ein QueryString existiert, und im negativen Fall einen 404 ausgeben.
mfg Beat