2012-03-28 7 views
3

Als überspringen FYI, ich bin mit der folgenden .htaccess-Datei in ich an www.site.com/content/.htaccess mod_rewrite nicht RewriteRule mit [S]

Wenn ein Benutzer besucht Login www.site.com/content/ ich will es den Inhalt von www.site.com/content/ userlogin.php anzuzeigen (über Rewrite maskiert und Umleitung nicht) - die ich eRFOLGREICH wie so getan:

RewriteEngine On 
RewriteBase /content/ 
RewriteRule ^login/?$ /content/userlogin.php [NC,L] 


aber ich möchte folgendes hinzufügen: Wenn sie versuchen auf www.site.com/conten zuzugreifen t/userlogin.php direkt, möchte ich sie auf eine 404-Seite bei www.site.com/content/ Fehler umgeleitet werden/404.php

RewriteEngine On 
RewriteBase /content/ 
RewriteRule ^login/?$ /content/userlogin.php [NC,S=1,L] 
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L] 


mit dem in der .htaccess-Datei sowohl www.site.com/content/ Login und www.site.com/content/ userlogin.php zeigen www.site.com/content/ Fehler/404.php

Antwort

2

Zuerst wird die S = 1 hat keine Funktion, da die L-Anweisung weitere Umschreibungen vornimmt oben. Es scheint, als ob die erste RewriteRule Apache die .htaccess-Regeln noch einmal durchlaufen lässt, also müssen Sie wissen, ob das erste Rewrite passiert ist. Sie können dies tun, indem Sie eine Umgebungsvariable wie diese Einstellung:

RewriteRule ^login/?$ /content/userlogin.php [E=DONE:true,NC,L] 

Also, wenn die nächste Umleitung erfolgt die Umgebungsvariable wird tatsächlich neu geschrieben REDIRECT_<variable> und Sie können auf diesen einen, wie dies ein RewriteCond tun:

RewriteCond %{ENV:REDIRECT_DONE} !true 
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L] 

Hoffnung hilft diese

+0

Dies funktioniert genau so, wie Sie es geschrieben haben, danke. Ich habe jedoch eine neue Reihe von Problemen auf der Grundlage meiner spezifischen Anwendung festgestellt, also werde ich versuchen, es herauszufinden, bevor ich mich geschlagen geben werde. Prost! (von einem Typen namens Björn) – iverSUN

0

Verwenden %{THE_REQUEST} Variable im Code statt:

RewriteEngine On 
RewriteBase /content/ 

RewriteRule ^login/?$ content/userlogin.php [NC,L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+userlogin\.php[\s\?] [NC] 
RewriteRule^content/error/404.php [L]