Bist du sicher, dass du das machen willst? Sogar CSS und JS Dateien und Bilder und ...?
OK, überprüfen Sie zuerst, ob mod_access in Apache installiert ist, und fügen Sie dann Folgendes zu Ihrem .htaccess hinzu:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
<Files /index.php>
Order Allow,Deny
Allow from all
</Files>
Die erste Direktive verbietet den Zugriff auf Dateien außer von localhost, da Order Deny,Allow
Allow später angewendet wird und die zweite Direktive nur index.php betrifft.
Vorsichtsmaßnahme: Kein Leerzeichen nach dem Komma in der Bestellzeile.
Verwenden Sie diese Anweisung, um den Zugriff auf Dateien zu ermöglichen, die mit * .css oder * .js übereinstimmen:
<FilesMatch ".*\.(css|js)$">
Order Allow,Deny
Allow from all
</FilesMatch>
Sie können jedoch keine Anweisungen für <Location>
oder <Directory>
in .htaccess-Dateien verwenden.
Sie können <FilesMatch ".*\.php$">
die erste Erlaubnis verwenden, die Gruppe verweigern und dann explizit den Zugriff auf index.php zulassen.
Update für Apache 2.4:
Diese Antwort ist für Apache 2.2 korrekt. In Apache 2.4 hat sich das Zugriffssteuerungsparadigma geändert, und es ist die richtige Syntax zu verwenden Require all denied
.
Eigentlich kam ich mit der gleichen Frage hierher wie der Schöpfer des Themas, aber keine der angegebenen Lösungen war eine vollständige Antwort auf mein Problem. Warum sollten Sie ALLEN Dateien auf Ihrem Server einen Code hinzufügen, wenn Sie ihn einfach einmal konfigurieren könnten? Der nächstgelegene war der von Residuum, aber dennoch schloss er ALLE Dateien aus, als ich nur PHP-Dateien ausschließen wollte, die nicht index.php hießen.
Also habe ich mir einen .htaccess ausgedacht, der Folgendes enthält:
<Files *.php> Order Deny,Allow Deny from all Allow from 127.0.0.1 </Files> <Files index.php> Order Allow,Deny Allow from all </Files>
(Denken Sie daran, dass htaccess-Dateien rekursiv arbeiten, sodass sie perfekt zur Voraussetzung der Frage passen.)
Und es geht los. Die einzigen PHP-Dateien, auf die ein Benutzer zugreifen kann, sind die mit dem Namen index.php. Sie können jedoch weiterhin auf jedes Bild, CSS-Stylesheet, JS-Skript usw. zugreifen.
quelle
Eine schräge Antwort auf die Frage besteht darin, den gesamten Code als Klassen zu schreiben, mit Ausnahme der index.php-Dateien, die dann die einzigen Einstiegspunkte sind. PHP-Dateien, die Klassen enthalten, verursachen nichts, selbst wenn sie direkt über Apache aufgerufen werden.
Eine direkte Antwort besteht darin, Folgendes in .htaccess aufzunehmen:
<FilesMatch "\.php$"> Order Allow,Deny Deny from all </FilesMatch> <FilesMatch "index[0-9]?\.php$"> Order Allow,Deny Allow from all </FilesMatch>
Dadurch kann auf alle Dateien wie index.php, index2.php usw. zugegriffen werden, es wird jedoch jeglicher Zugriff auf andere .php-Dateien verweigert. Andere Dateitypen sind davon nicht betroffen.
quelle
Sie können versuchen, eine Konstante in zu definieren
index.php
und so etwas hinzuzufügenif (!defined("YOUR_CONSTANT")) die('No direct access');
an den Anfang der anderen Dateien.
ODER Sie können
mod_rewrite
Anforderungen verwenden und an index.php umleiten, indem Sie sie.htaccess
wie folgt bearbeiten :RewriteEngine on RewriteCond $1 !^(index\.php) RewriteRule ^(.*)$ /index.php/$1 [L,R=301]
Dann sollten Sie in der Lage sein, alle eingehenden Anforderungen in der index.php zu analysieren und entsprechende Maßnahmen zu ergreifen.
Wenn Sie beispielsweise alle * .jpg-, * .gif-, * .css- und * .png-Dateien weglassen möchten, sollten Sie die zweite Zeile wie folgt bearbeiten:
RewriteCond $1 !^(index\.php|*\.jpg|*\.gif|*\.css|*\.png)
quelle
.htaccess: RewriteRule: unknown flag 'L][R'
Wie wäre es, wenn Sie alle .php-Dateien außer index.php über dem Webstamm halten? Es sind keine Umschreiberegeln oder programmatischen Kludges erforderlich.
Das Hinzufügen des Includes-Ordners zu Ihrem Include-Pfad hilft dann dabei, die Dinge einfach zu halten, ohne dass absolute Pfade usw. verwendet werden müssen.
quelle
include('file.php')
toinclude('myfolder/file.php')
ini_set('include_path', ini_get('include_pat'). ':/path/to/files');
) aufnehmen, können Sie dasselbe tun, ohne dass etwas kaputt geht.Das Umschreiben von URLs kann verwendet werden, um eine URL PHP-Dateien zuzuordnen. Die folgenden Regeln können angeben, ob eine .php-Anforderung direkt gestellt oder neu geschrieben wurde. Es verbietet die Anfrage im ersten Fall:
Diese Regeln verbieten alle Anfragen, die mit enden
.php
. URLs wie/
(die index.php auslösen),/test
(die in index.php/test?f=index.php
umgeschrieben werden ) und (die index.php in Querystring enthalten) sind jedoch weiterhin zulässig.THE_REQUEST
enthält die volle Linie HTTP - Anforderung von dem Browser an den Server (zB gesendetGET /index.php?foo=bar HTTP/1.1
)quelle
Anstatt eine Variable , das um ich dies tun , das ist in sich geschlossen am oberen Rand einer beliebigen Seite , die Sie nicht wollen , den direkten Zugriff auf dieses noch mit .htaccess Regeln kombiniert werden sollte , aber ich fühle mich sicherer zu wissen , gibt es eine ausfallsichere , wenn htaccess bringt immer Unordnung.
<?php // Security check: Deny direct file access; must be loaded through index if (count(get_included_files()) == 1) { header("Location: index.php"); // Send to index die("403"); // Must include to stop PHP from continuing } ?>
quelle
Mit Apache 2.4 hat sich die Syntax für die Zugriffssteuerung geändert. Bei Verwendung von Anweisungen wie:
Order deny,allow Deny from all
funktioniert nicht, Sie verwenden wahrscheinlich Apache 2.4.
Die Apache 2.4-Dokumente sind hier .
Sie müssen auf
Require all denied
eine der folgenden Arten verwenden:# you can do it this way (with "not match") <FilesMatch ^((?!index\.php).)*$> Require all denied </FilesMatch> # or Require all denied <Files index.php> Require all granted </Files>
quelle
Eine einfache Lösung besteht darin, alle Nicht-index.php-Dateien in .inc umzubenennen und dann den Zugriff auf * .inc-Dateien zu verweigern. Ich benutze dies in vielen meiner Projekte und es funktioniert einwandfrei.
quelle
Legen Sie alle Dateien in einem Ordner ab. Legen Sie eine .htaccess-Datei in diesen Ordner und geben Sie ihm den Wert "Alle verweigern". In index.php, das sich außerhalb des Ordners befindet, werden die richtigen Seiten basierend auf Benutzereingaben oder Ereignissen wiedergegeben
quelle
<Files ~ "^.*\.([Pp][Hh][Pp])"> Order allow,deny Deny from all Satisfy All </Files>
quelle
Erlaube nur 2 IP, alle anderen werden blockieren
Order Deny,Allow Deny from all Allow from 173.11.227.73 108.222.245.179
quelle