132

次の .htaccess ファイルがあります。

RewriteEngine On
RewriteBase /

# Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

# Protect log.txt
<Files ./inscription/log.txt>
Order Allow,Deny
Deny from all
</Files>

# Disable directory browsing
Options All -Indexes

訪問者が次のファイルにアクセスすることを禁止しようとしています:

domain.com/inscription/log.txt

しかし、上記の機能は機能しません。ブラウザからリモートでファイルにアクセスできます。

4

5 に答える 5

223

htaccess ファイル内では、<Files>ディレクティブのスコープはそのディレクトリにのみ適用されます (サブディレクトリの htaccess 内のルール/ディレクティブが親からのものに取って代わって適用されるときの混乱を避けるためだと思います)。

したがって、次のことができます。

<Files "log.txt">  
  Order Allow,Deny
  Deny from all
</Files>

Apache 2.4+ の場合は、次を使用します。

<Files "log.txt">  
  Require all denied
</Files>

ディレクトリ内の htaccess ファイルinscription。または、mod_rewrite を使用して、htaccess ファイルと log.txt へのアクセスを拒否する両方のケースを処理することができます。

RewriteRule /?\.htaccess$ - [F,L]

RewriteRule ^/?inscription/log\.txt$ - [F,L]
于 2012-07-30T21:18:18.500 に答える
15

現在受け入れられている答えが正しいとは思いません。たとえば.htaccess、仮想サーバー (apache 2.4) のルートに次のファイルがあります。

<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>

これにより、サブディレクトリにある への外部アクセスが防止さreminder.phpれます。.htaccessApache 2.2 サーバーに同様のファイルがあり、同じ効果があります。

<Files "reminder.php">
        Order Deny,Allow
        Deny from all
        Allow from localhost
        Allow from 127.0.0.1
     Allow from xxx.yyy.zzz.aaa
</Files>

確かなことはわかりませんが、.htaccessファイル内で具体的にサブディレクトリを定義しようとしていると思われます。つまり <Files ./inscription/log.txt>、失敗の原因となっています。.htaccessディレクトリと同じディレクトリにファイルを置く方が簡単でlog.txtinscriptionそこで動作します。

于 2015-04-09T21:12:26.980 に答える