テスト用のウェブサイトのデプロイにgitを使い始めました。 Apacheが.gitディレクトリのコンテンツを提供しないようにするにはどうすればよいですか?
私は試した
<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>
成功しませんでした。
各.gitディレクトリに.htaccessファイルを作成してアクセスを拒否できることはわかっていますが、すべてのWebサイトでこれをグローバルにするメインの構成ファイルに追加できるものが欲しかったです。
ルールに「git」ではなく「svn」があるため、機能しません。 'svn'を 'git'に置き換えるだけです。
<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>
これは他の多くの回答と同じ効果がありますが、はるかに簡単です。
RedirectMatch 404 /\.git
これは.htaccess
またはサーバーの構成ファイルに入れることができます。名前が.git
で始まるファイルまたはディレクトリ(例:.git
ディレクトリまたは.gitignore
ファイル)を非表示にするには、404を返します。Gitリポジトリの内容が非表示になるだけでなく、その存在そのものも隠されています。
.htaccessファイルを使用せず、代わりに/etc/Apache2/httpd.conf(またはサーバーのマスターconfファイル)を使用して.gitディレクトリと.gitignoreファイルの両方を非表示にする場合は、以下を使用できます。上記のmaster conf設定の回答ではgitignoreファイルが非表示になっていないことがわかりました。
# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
Order deny,allow
Deny from all
</Directorymatch>
<Files ~ "^\.git">
Order allow,deny
Deny from all
</Files>
共有ホスティングサービスを利用していてApache.confにアクセスできない場合でも、次のように.htaccessファイルでアクセスできます。
RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]
# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+
これは.htaccess
、 番号 http.conf
アクセスが必要です。これを最初の書き換えルールとして含めます。先頭にRewrite On
必要に応じて。
セキュリティの観点から、私は403よりも偽の404を好んでおり、攻撃者にとってより有益です。 2つのうち1つをコメントアウトして、他のユーザーも機能するようにします。
ところで、良い変更は、2つのあなたのlithmusテストです:
http://localhost/.gitignore
http://localhost/.git/HEAD
.htaccessを使用して、.gitディレクトリと.gitignoreや.gitmodulesなどの他のファイルの両方を保護するには、次のコマンドを使用します。
RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"
私は常に次の行をvhostテンプレートに追加します
RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
VCS固有のデータに誰もアクセスできないようにしてください。完璧に動作します。
Linuxディストリビューションのすべての「非表示」ファイルとディレクトリ(通常、「。」で始まるすべてのファイル)を単に拒否することを望むユーザーのために、サーバーのconfコンテキストに配置した場合のApache 2.4での動作を次に示します。
<FilesMatch "^\.(.*)$">
Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
Require all denied
</DirectoryMatch>
そして、これは古いApache 2.2スタイルです(同じ正規表現、異なるauthディレクティブ)。
<FilesMatch "^\.(.*)$">
Order deny,allow
Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
Order deny,allow
Deny from all
</DirectoryMatch>
そうすれば、特に.git
または.svn
について心配する必要はありません。これは.htaccess
や.htpasswd
のようなものにも本質的に一致します。
個人的には、このようなリクエストに対して404ではなく403を発行するのが好きですが、次のように、auth deialの代わりにRewriteRuleを簡単に使用できます。
<FilesMatch "^\.(.*)$">
RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>
Webサーバーが.gitリポジトリへのアクセスに使用するユーザーとは別のユーザーを使用している場合、.gitディレクトリの他のユーザーの実行ビットを無効にすることができます。
これは他のWebサーバーで動作し、パフォーマンスを消費する.htaccessファイルに依存しません。
これは少し遅いですが、私の答えは少し異なりますので、追加したいと思いました。これは、httpd.confファイルに含める必要があります。 <Files "*">
タグ内にネストされた<Directory>
は、ディレクトリ内のすべてのファイルをブロックします。
# GitHub Directory
<Directory /var/www/html/yoursite/.git>
Order Deny,Allow
Deny from all
<Files "*">
Order Deny,Allow
Deny from all
</Files>
</Directory>
# GitHub files
<Files .gitignore>
order Deny,Allow
Deny from all
</Files>
あなたはおそらくサービングを拒否したい.gitignore
同様に。
ドットで始まるファイルはLinuxでは非表示になっています。
したがって、ドットで始まる404だけです。
RedirectMatch 404 /\.