2010-12-04 17 views
22

名前がDOTで始まるファイルまたはディレクトリへのアクセスを無効にしたいとします。私は次のことを考え出しましたが、DOTで始まるファイル/ディレクトリへのアクセスがドキュメントルートに直接存在する場合にのみ、アクセスを無効にします。これによりApache設定:ドットで始まるファイル/ディレクトリへのアクセスを無効にするRegex

<Files ~ "^\.|\/\."> 
    Order allow,deny 
    Deny from all 
</Files> 

http://my_server.com/.svn/entries --> Permission denied 
http://my_server.com/abcd/.svn/entries --> Accessible, should be disabled 

適切な正規表現は、これを達成するためにいただきましたか? <Files>のみ要求されたドキュメントのベース名に適用されるため

おかげで、

JP

答えて

45

あなたのコードは動作しません。つまり、最後のスラッシュの後の部分です。 (ソース:http://httpd.apache.org/docs/current/mod/core.html#files

Apacheブロック.htaccessデフォルトインストール(より良い:すべてのファイルが.htで始まる)のファイルです。あなたは、設定ファイルで密接に見た場合、あなたはこのような何か見るでしょう。だから、ドットで始まるすべてのファイルを非表示にする

<FilesMatch "^\.ht"> 
    Order allow,deny 
    Deny from all 
</FilesMatch> 

を、あなたが使用します。

<FilesMatch "^\."> 
    Order allow,deny 
    Deny from all 
</FilesMatch> 

それを動作させるためにはこれは、任意のを見てから拒否します

<DirectoryMatch "^\.|\/\."> 
    Order allow,deny 
    Deny from all 
</DirectoryMatch> 
+0

詳細な説明をいただきありがとうございます。これはうまく動作します! –

16
RewriteRule (^\.|/\.) - [F] 

:ドットで始まるディレクトリに対して、以下の(テスト)コードを使用しますドットで始まるファイルまたはディレクトリ。 パスツリーのどのレベルにも影響します。

最後の[F]修飾子はアクセスを禁止すると言います(適用する最後のルールであると言うにはL修飾語は必要ありませんが、デフォルトで暗黙指定されています)。正規表現は、2つの部分があり

(それらのいずれかが一致することができ、両方をする必要はありません):

(part1|part2) 

最初の部分は、あなたがそれを使用する場合の(ドットから始まるものと一致しましたディレクトリごとの.htaccessファイルと)私たちが一致している文字列の先頭にスラッシュは存在しません:

^\. 

たとえば、これは.test.git/HEAD のために動作しますが、のために動作しません。,path/.hidden

2番目の部分は、スラッシュとそれに続くドットを含むものと一致します。これはVirtualHostまたはサイドワイドのApache設定でこのルールを持つ場合に便利です。ここで一致するcase文字列はスラッシュで始まることがあります。

このルールは一致します:/.gitsome/.hidden このルールは一致しません:.git.hidden

我々はこれらのルールの両方を組み合わせると、我々はすべての可能なケースをカバーするようです。書き換えMODに

+0

これはdeb.jessieで完全に機能します。ありがとう。 – Spooky

1

:ドットで始まる

RewriteEngine on 

RewriteCond %{THE_REQUEST} ^.*/\. 
RewriteRule ^(.*)$ - [R=404] 

すべてのファイルまたはディレクトリは、これが私のために完璧に動作404

/myDir/.svn => 404 
/.gitignore => 404 
/dir1/dir2/dir3/..../.toHide => 404 
2

にリダイレクトされます(Apacheの2.4):

<LocationMatch "\/\."> 
    Require all denied 
</LocationMatch> 

ドット(ファイルまたはディレクトリ)で始まるコンポーネントを含むURLを拒否します。

関連する問題