2016-05-21 7 views
0

Der Titel beschreibt das Problem nicht vollständig, aber ich habe die Regeln umgeschrieben, um zu drei verschiedenen Dateien zu gehen, die im Hauptverzeichnis existieren: api.php, admin.php und Hier index.phphtaccess rewrite funktioniert nicht für mehrere Dateien im Hauptverzeichnis

ist meine .htaccess

RewriteEngine on 
RewriteCond $1 ^(api) 
RewriteRule ^(.*)$ /api.php/$1 [L] 

RewriteCond $1 ^(admin) 
RewriteRule ^(.*)$ /admin.php/$1 [L] 

RewriteCond $1 !^(index\.php|admin\.php|api\.php|admin|api|_|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Für/admin und/api ich einen 500 Internal Server Error erhalten. Ich bin nicht sicher, warum das passiert, aber wenn ich diese PHP-Dateien in einem Ordner wie/_ und bearbeiten Sie die. Htaccess, um es anzupassen, dann wird es ohne einen Fehler neu geschrieben. Ist die Anzahl der Weiterleitungen von Hauptverzeichnisdateien, die ich ausführen kann, begrenzt? Oder habe ich etwas verpasst?

Mein Hauptziel ist:

Redirect alle/api Anfragen

Redirect alle/admin Anfragen an /api.php/whatever/is/after/here /admin.php/whatever/ ist/nach hier/

Redirect alle anderen Anfragen abgesehen von den Ausnahmen

Antwort

1

Versuchen Sie, mit /index.php/whatever/is/here:

RewriteEngine on 

# skip all files and directories from rewrite rules below 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule ^(api.*)$ /api.php/$1 [L] 
RewriteRule ^(admin.*)$ /admin.php/$1 [L] 

RewriteCond $1 !^(index\.php|admin\.php|api\.php|admin|api|_|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 
+0

Ja, danke, das funktioniert. Hast du eine Chance, warum? Ich finde das ziemlich merkwürdig, dass ich meine Dateien entweder in Ordner legen oder nach bereits existierenden Dateien suchen muss, sonst wird es nicht umgeleitet. Ich wollte wirklich nicht, dass es in Dateien/Verzeichnisse geht, auch wenn sie existieren. Ich möchte, dass alles neu geschrieben wird. – Samir

+0

Für meine Meinung wollte ich nicht wirklich alle diese Dateien und Verzeichnisse öffnen. Ich habe versucht, RewriteCond $ 1^(api | admin) zu der ersten Regel hinzuzufügen, aber dann hatte ich das gleiche Problem wie vorher, wo Admin und API 500 Fehler gaben und alles andere gut funktionierte. Ich wollte irgendwie streng sein, dass, wenn jemand von api oder admin kommt (und die wenigen Ausnahmen), sie in index.php umgeschrieben werden, unabhängig von der Existenz von Dateien oder Verzeichnissen. – Samir

0

Ich fand, dass ich in meiner Regex-Übereinstimmung einfach spezifischer sein musste. Zuvor passte ich zu allem, was mit "admin" oder "api" (zB admins-at-the-new-school) anfing, was mir eigentlich nicht bewusst war und in Zukunft sowieso Probleme bereiten würde. Ich habe meine Regex geändert und jetzt passt es nur, wenn es das Ende einer Zeile, ein Rautenzeichen, ein Schrägstrich oder ein Fragezeichen ist. (Basierend auf Tests)

Hier ist mein letzter Code ist:

RewriteEngine on 
RewriteRule ^(api(?=$|[/?#]).*)$ /api.php/$1 [L] 
RewriteRule ^(admin(?=$|[/?#]).*)$ /admin.php/$1 [L] 

RewriteCond $1 !^(index\.php|admin\.php|api\.php|_|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

ich Croisés Antwort schätzen, und es half mir eine Vorstellung von dem, was könnte schief gehen, dass seine Lösung funktionieren würde. Dies war jedoch, was ich suchte, da ich den Zugriff auf Dateien und Verzeichnisse einfach nicht öffnen wollte, einfach weil sie existierten.