Wie kann ich den Zugriff auf `/` und auch `/index.php` auf meinem Server einschränken, aber sonst nichts zulassen?

Wie kann ich den Zugriff auf `/` und auch `/index.php` auf meinem Server einschränken, aber sonst nichts zulassen?

Ich möchte den Benutzern nur den Besuch index.php(und auch nur den Zugriff /) auf meinen Server gestatten und sonst nichts (bei einer gültigen Datei wird eine 403- und bei einer ungültigen Datei eine 404-Fehlermeldung zurückgegeben).

Wie kann ich das machen? Ich habe die folgenden Lösungen ausprobiert Zugriff auf alle Dateien außer index.html verweigern Apache

Zugriff auf alle Dateien außer index.php verweigern, aber Zugriff über "/" in der htaccess-Datei zulassen

aber sie scheinen keine Wirkung zu haben.

Meine .htaccess-Datei ist diese, aber sie hat keine Wirkung und ich kann weiterhin auf andere Dateien auf meinem Server zugreifen:

Order allow,deny
Deny from all
<FilesMatch index\.php>
        Allow from all
</FilesMatch>

Ich bin nicht sicher, ob ich in meiner Virtualhosts-Konfiguration auch etwas definieren muss?

Meine Virtualhosts-Datei ist:

ServerAdmin webmaster@localhost
ServerName server.mydomain.com
ServerAlias server.mydomain.com
DocumentRoot /var/www/server.mydomain.com
DirectoryIndex index.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live/server.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/server.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

Die Ausgabe von apache2ctl -S lautet:

VirtualHost configuration:
*:443                  server.mydomain.com (/etc/apache2/sites-enabled/server.mydomain.com-le-ssl.conf:2)
*:80                   server.mydomain.com (/etc/apache2/sites-enabled/server.mydomain.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

Antwort1

Meiner Meinung nach gehen Sie die Dinge falsch an und versuchen, ein Problem zu lösen, das vollständig vermieden werden kann:

Speichern Sie einfach keine Dateien und Verzeichnisse in Ihrem DocumentRoot, die nicht online gehören.

Beschränken Sie den Inhalt des Verzeichnisses /var/www/server.example.comauf nur diese index.phpDatei, dann können Sie nichts falsch machen.


Diese Frage ist mit dem historischenVersion und Syntax davon sind nicht für die aktuelle Apache httpd 2.4-Version geeignet. - Siehehttps://httpd.apache.org/docs/2.4/upgrading.html


Wenn Sie etwas veröffentlichen möchten, http://www.example.com/some-path/ verwenden Sie dieAlias-Direktive, um ein völlig anderes Verzeichnis verfügbar zu machen, anstatt ein Unterverzeichnis zu erstellen /var/www/server.example.com/some-path/ (z. B. create /var/www//some-path), und verwenden Sie:

<VirtualHost *:80
    ServerAdmin webmaster@localhost
    ServerName server.mydomain.com
    ServerAlias server.mydomain.com
    DocumentRoot /var/www/server.example.com

    Alias /some-path "/var/www/some-path"

    <Directory "/var/www/some-path"> 
       # add settings here, for example
       Order deny,allow
       Deny from all
       Allow From 127.0.0.1
    </Directory>
</VirtualHost>

verwandte Informationen