Как ограничить доступ к `/`, а также `/index.php` на моем сервере, не разрешая ничего другого?

Как ограничить доступ к `/`, а также `/index.php` на моем сервере, не разрешая ничего другого?

Я хотел бы разрешить пользователям посещать только мой сервер index.php(и только его /) и ничего больше (возвращая 403, если файл действителен, и 404, если файл недействителен).

Как я могу это сделать? Я пробовал следующие решения Запрет доступа ко всем файлам, кроме index.html apache

Запретить доступ ко всем файлам, кроме index.php, но разрешить доступ через «/» в файле htaccess

но, похоже, они не оказывают никакого эффекта.

Мой файл .htaccess выглядит следующим образом, но он не оказывает никакого эффекта, и я по-прежнему могу получить доступ к другим файлам на своем сервере:

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

Я не уверен, нужно ли мне что-то определять в конфигурации моих виртуальных хостов?

Мой файл virtualhosts выглядит так:

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

Вывод apache2ctl -S:

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

решение1

По моему скромному мнению, вы подходите к делу не в том направлении и пытаетесь решить проблему, которой можно было бы полностью избежать:

Просто не храните в DocumentRoot файлы и каталоги, которые не должны находиться в сети.

Ограничьте содержимое каталога /var/www/server.example.comтолько этим index.phpфайлом, и вы не ошибетесь.


Этот вопрос отмечен тегом «исторический»версия и синтаксис из нее не подходят для текущей версии Apache httpd 2.4. - См.https://httpd.apache.org/docs/2.4/upgrading.html


Если вы хотите что-то опубликовать, http://www.example.com/some-path/ используйтеAliasдиректива для предоставления доступа к другому каталогу вместо создания подкаталога /var/www/server.example.com/some-path/ (например, create /var/www//some-path) и используйте:

<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>

Связанный контент