2016-11-22 2 views
0

Hier ist mein Setup. Ich habe example.com, die Dateien und Unterverzeichnisse hat. Eine dieser Dateien ist maintenance.php und eines dieser Verzeichnisse ist/admin. Ich versuche, alle Anfragen von example.com an example.com/maintenance.php umzuleiten, EXCEPT für example.com/maintenance.php (dies verursacht keinen Fehler) und alle Seiten in example/admin. example.com/file1 sollte zu example.com/maintenance.php umleiten, example.com/maintenance.php sollte keine Fehler verursachen und example.com/admin/file1 sollte NICHT umleiten.Wie umleitung ich mit htaccess alle außer 1 Verzeichnis und 1 Datei?

Das ist, was ich habe, dass ich nicht zur Arbeit kommen konnte:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !(.*)admin.* 
RewriteCond %{REQUEST_URI} !^/maintenance.php$ 
RewriteRule .* /maintenance.php [R=302,L] 

example.com/admin leitet noch

Dank all

+0

Sie sollten antworten, auch wenn die Antworten nicht für Sie arbeiten. – Walf

Antwort

-1

example.com/maintenance.php Stellen Sie sicher, dass Ihre example.com/admin URL keine 404 Not Found ist. Wenn der Server versucht, zum Fehlerdokument umzuleiten, wird er in die maintenance.php umgeleitet, weil das Fehlerdokument nicht von der Weiterleitung ausgeschlossen ist. Um dies zu vermeiden, könnten Sie eine RewriteCond Regel hinzufügen, die Ihre Fehlerdokumente ausschließt. Zum Beispiel:

RewriteEngine On 

#Exclude *admin* and /maintenance.php 
RewriteCond %{REQUEST_URI} !.*admin.* 
RewriteCond %{REQUEST_URI} !^/maintenance\.php$ 

#This handles both 404 and 500 Errors 
RewriteCond %{REQUEST_URI} !^/path/to/(404|500)\.html$ 

RewriteRule .* /maintenance.php [R,L] 

Ich entkam auch die Punkte in den Pfaden, wie es gute Praxis ist, dies zu tun. (Vermeidet, dass MaintenanceXphp nicht ebenfalls umleitet.)

0

Verwenden Sie niemals eine externe Weiterleitung, wenn Ihre Site nicht verfügbar ist; Sie müssen einen 503-Header festlegen oder Sie können Ihr Suchmaschinen-Ranking beenden.

Lassen Sie alle vorhandenen Rewrite-Regeln allein, und fügen Sie diese vor allen von ihnen:

RewriteRule ^(?!maintenance\.php$|admin(?:$|/)) maintenance.php [NS,L] 

Die ersten Zeilen von maintenance.php

<?php 
header($_SERVER['SERVER_PROTOCOL'] . ' 503 Service Unavailable'); 

Es kann immer noch Inhalt haben sollte.

Wenn Sie immer noch nicht in den Admin gelangen, werden Sie zumindest sehen können, welche anderen URLs eine Whitelisting benötigen. Möglicherweise müssen Sie auch Medien-, CSS- und/oder JS-Verzeichnisse ausschließen.

Wenn Sie fertig sind, kommentieren Sie die Regel mit einer für das nächste Mal aus.

Verwandte Themen