変更の追跡とサイトの更新にgithub(クローズドソース)を使用するWebサイトがあります。唯一の問題は、.gitディレクトリにWeb経由でアクセスできるように見えることです。これを停止してgitを使用できるようにするにはどうすればよいですか?
.htaccessを使用する必要がありますか?.gitの権限を変更する必要がありますか?
変更の追跡とサイトの更新にgithub(クローズドソース)を使用するWebサイトがあります。唯一の問題は、.gitディレクトリにWeb経由でアクセスできるように見えることです。これを停止してgitを使用できるようにするにはどうすればよいですか?
.htaccessを使用する必要がありますか?.gitの権限を変更する必要がありますか?
回答:
フォルダーに.htaccess
ファイルを作成し、.git
このファイルに以下を配置します。
Order allow,deny
Deny from all
ただし、リポジトリを再クローンすると失われることに注意してください。
.git/
、リポジトリを再クローンすると失われるため、ディレクトリ自体には配置しないことをお勧めします。
これをWebサーバーのルートにある.htaccess
ファイルに入れます。
RedirectMatch 404 /\.git
このソリューションは堅牢で安全です。
.git
サイト内のすべてのディレクトリで機能します。複数ある場合でも、.gitignore
やなどの他のGitファイルも非表示にします.gitmodules
.git
ディレクトリでも機能し、.git
フォルダーで機能しましたが、.gitignore
ファイルを取得することができました。
server config, virtual host, directory, .htaccess
RedirectMatch 404 /\.git.*
フォルダーの両方の.htaccess
権限が機能し.git/
ます。前者をお勧めします:
<Directory .git>
order allow,deny
deny from all
</Directory>
<Files>
、<FilesMatch>
)。
.git
ディレクトリをいじくり回したくなかったので、Apache 2.2でBennettのソリューションを動作させることができませんでしたが、<VirtualHost>
構成に以下を追加するとうまくいきました。
RewriteRule ^.*\.git.* - [R=404]
私は自分の.gitフォルダーへのアクセスを個別に制御することに抵抗があり、.htaccessの代わりにapache configを介してそれを実行することを選択して、それらを上書きしたり、新しいインストールを忘れたりしないようにします。
ここにいくつかの詳細な説明があります。Ubuntu 16.10を使用しています。
より堅牢でシンプルなオプションは、.git
ディレクトリのREADおよび実行権限を無効にすることです。
たとえば、ほとんどのApache(httpd)は特別なユーザーアカウントで実行されるため、apache
CentOSではユーザーとして実行されますが、.git
ディレクトリは実際のユーザーアカウントで作成する必要があるため、権限を変更するだけでアクセスをブロックできます。さらに、このアプローチは新しいファイルを導入せず、gitコマンドにも影響しません。
コマンドは次のとおりです。
chmod -R o-rx .git
chmod
再度実行することを覚えておかなければならないことです。
mod_rewriteはあなたに望ましい効果を与えます:
RewriteEngine on
RewriteRule .*\.git/.* - [F]
.git
。NotFoundではなくForbiddenコードが返されるため、ディレクトリの存在を簡単に特定できます。
.htaccess
ほとんどの回答が示唆するようなルールをいじる代わりに、単に.git/
ディレクトリをウェブルートの上に置いてみませんか?
私の設定では、私の.git
ディレクトリは通常次のような場所にあります:
/home/web/project_name/.git/
私の実際のコードは住んでいます
/home/web/project_name/www_root/
私のWebルート(ApacheまたはNginxで定義されているように..私は後者を好みます)なので/home/web/project_name/www_root/
、.git
ディレクトリはWebルートよりも「高い」ため、Webからディレクトリにアクセスできません。
project_name
ディレクトリには2つのサブディレクトリwww_root
があります。訪問者が私のサイトを閲覧したときに実際に提供されるファイルと.git
、リポジトリの場所です。リポジトリの更新www_root
とその内容からのプル。重要なのは、.git
ディレクトリが階層的に私のフロントコントローラの「上」にあるため、Web経由でアクセスできないことです。