サーバー上の `/` と `/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>

仮想ホストの設定でも何かを定義する必要があるかどうかはわかりません。

私の仮想ホストファイルは次のとおりです:

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リリースには適していません。 - を参照してください。2.4 へのアップグレード


何かを公開したい場合は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>

関連情報