2015-05-25 11 views
5

Ich bin mit.htaccess nur Zugriff auf index.php und einem Verzeichnis erlauben

RewriteEngine On 
RewriteRule ^.*$ ./index.php 

all Verkehr meiner Website durch index.php umleiten und mein PHP-Code lassen Sie die request_uri und Strecke jede Anforderung entsprechend erhalten.

Ich mag Zugriff auf alle anderen Dateien/Verzeichnisse mit einer Ausnahme beschränken, die die js Dateien, CSS-Dateien, Bilder usw.

ich das zu tun gefunden enthalten, dass ich verwenden:

Order deny,allow 
Deny from all 

<Files index.php> 
    Order Allow,Deny 
    Allow from all 
</Files> 

und dann eine andere .htaccess-Datei im öffentlichen Verzeichnis haben, um bestimmte Dateitypen zuzulassen.

Wenn ich zu localhost/mysite/index.php navigiere, funktioniert es gut, da die Datei index.php zugänglich ist.

Aber für jede andere URL bekomme ich eine 403, zum Beispiel/mysite/home/ist verboten, obwohl ich erwartet habe, dass es normal funktioniert.

Was kann ich tun, um das erwartete Verhalten zu erhalten?

Meine volle .htacces Datei ist:

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^.*$ ./index.php 


Order deny,allow 
Deny from all 

<Files index.php> 
    Order Allow,Deny 
    Allow from all 
</Files> 

EDIT: Die /public/.htaccess derzeit wie folgt aussieht:

<Files ~ "\.(xml|css|jpe?g|png|gif|js|pdf)$"> 
    Allow from all 
</Files> 
+0

Können Sie zeigen '/ public/.htaccess' auch? – anubhava

+0

@anubhava Ich habe die Frage bearbeitet, um auch das zu berücksichtigen. – ppp

Antwort

5

diesen Code in /mysite/.htaccess Versuchen:

DirectoryIndex index.php 
RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule^index.php [L] 

RewriteRule !^(public/|index\.php) [NC,F] 
+0

Es funktioniert gut, wenn ich zu localhost/mysite/index.php gehe, aber ich bekomme immer noch ein verbotenes wenn ich nach localhost/mysite/home/gehe. Sollte es nicht erlaubt sein, da es auf index.php umgeleitet wird? – ppp

+0

Ich dachte, Sie möchten nur "http: // example.com/public/*" und "http: // example.com/index.php" zulassen. Ist das nicht der Fall? – anubhava

+0

Das ist der Fall, aber ich möchte auch saubere URLs haben können, also ist die URL 'localhost/mysite/home /' eine Anfrage an 'index.php' mit' $ _SERVER ['REQUEST_URI'] = "/mysite/home "'. Das Problem ist, dass, obwohl die Anfrage an localhost/mysite/home/an 'index.php' gesendet werden soll, dies durch' .htaccess' verhindert wird. – ppp

1

Sie verwenden können:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.+)$ index.php 

Das ist der .htaccess, den ich für meine Anwendungen verwende. Im öffentlichen Verzeichnis lege ich nur index.php und JS, CSS und Bilddateien ab, die ich brauche, so dass man sie nicht herausfiltern muss. Jede andere Datei (z. B. Uploads) wird in einem Ordner außerhalb des Öffentlichen Ordners gespeichert, auf den sie nicht direkt zugreifen können - nur über ein PHP-Skript, das sie liest. Ich glaube, das ist "best practice".

+0

Dies wäre mein letzter Ausweg, aber ich möchte wirklich herausfinden, was mit meinem .htaccess nicht stimmt und es mit meiner aktuellen Dateistruktur arbeiten lassen. – ppp

Verwandte Themen