2017-01-06 3 views
2

Was möchte ich tun, wenn die URL www.example.com/index.php/anything dann sollte es den Benutzer zu werfen www.example.com/error-404 Hier sind meine aktuellen Ausdrücke in meiner Htaccess-Datei.Wie umleiten, wenn die URL index.php/somefileOrsomedirectory

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?$1 [L,QSA] 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC] 
RewriteRule^%1 [R=301,L] 

RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule (.*)$ http://www.example.com/$1 [L,R=301] 
Redirect 301 /online-features/key-anywhere-web-based-system http://www.example.com/online-features 
Redirect 301 /home http://www.example.com/ 

Vielen Dank im Voraus. Bitte schlage/bearbeite meine Frage, wenn ich die Frage nicht korrekt gestellt habe.

EDIT Ich will nicht die /index.php zu / Umleitung verlieren.

+0

Ich möchte nur klären - also, wenn es ein Verzeichnis und oder eine Datei gibt, möchten Sie es auf die 404-Fehlerseite umgeleitet werden? – Lag

+0

@thickguru Wenn die URL '/ index.php/anything' angegeben wird -" anything "sind zusätzliche _path Informationen_, bezieht sie sich nicht auf ein Verzeichnis oder eine Datei. – DocRoot

+0

@docRoot Wenn es so etwas wie 1) /index.php/string 2) /index.php/directory 3) /index.php/pathwhichdoesnotexists Dann sollte es ideal zu/Fehler-404 –

Antwort

2

www.example.com/index.php/anything

/anything hier zusätzliche Pfadinformationen (nach dem Namen einer physischen Datei). Sie können die AcceptPathInfo Direktive verwenden speziell dieses „Feature“ deaktivieren:

AcceptPathInfo Off 

In diesem Fall werden alle URLs zusätzliche Pfadinformationen enthalten, jedoch automatisch einen 404. auslösen, können die URLs noch mod_rewrite verlegt werden, was wahrscheinlich ist, Was passiert hier.

Sie müssen noch eine mod_rewrite-Weiterleitung implementieren, wie in der Antwort des Datenskriptes erwähnt. Oder versuchen, so etwas wie die folgenden, bevor Sie Ihren bestehenden Richtlinien:

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^index\.php/ /error-404 [R=302,L] 

Die Prüfung gegen REDIRECT_STATUS ist eine Rewrite-Schleife zu vermeiden, da Ihre Front-Controller erscheint die Anfrage Pfad Info Route zu verwenden.

Ändern Sie dies zu 301, wenn dies dauerhaft sein soll, sobald Sie bestätigt haben, dass es funktioniert OK.

Es wäre jedoch vorzuziehen, wenn dies als ein ordnungsgemäßes Apache-Fehlerdokument implementiert wurde. Zum Beispiel:

ErrorDocument /error-404.php 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^index\.php/ - [R=404,L] 
+0

**/index.php/anything ** bedeutet, dass es sich um ein Verzeichnis oder eine Datei handeln kann. –

+0

Ich habe meine Antwort aktualisiert. – DocRoot

+0

Ich habe dieses auch versucht, und es hilft mir nicht. Bitte schauen Sie sich meine aktuellen Umleitungsregeln an, und schlagen Sie dann vor, es wird mir eine große Hilfe sein. Es funktioniert gut, wenn ich meine gesamte Umleitung entferne, aber ich möchte diese Umleitungen auch nicht verlieren. –

2

Ich denke, das folgende sollte tun, was Sie benötigen. Der Punkt ist ein beliebiges Zeichen und das + bedeutet ein- oder mehrmals. Dies würde den Schrägstrich erfordern es

RewriteRule ^index\.php/(.+)$ error-404 [L] 

EDIT zu sein: Dank @docRoot, entsprechend aktualisiert

+0

umleiten sollten Sie entkomme den ersten Punkt im 'RewriteRule' _pattern_, um einen literalen Punkt zu finden. – DocRoot

+0

Versucht es, aber funktioniert nicht –

+0

This: RewriteRule^(. *) $ Index.php? $ 1 [L, QSA] wird alles in index.php umschreiben, das ist keine Datei oder ein Verzeichnis.Haben Sie versucht, die Zeile in der obigen Antwort direkt nach RewriteBase/zu setzen? – datascript