変更の追跡とサイトの更新に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)は特別なユーザーアカウントで実行されるため、apacheCentOSではユーザーとして実行されますが、.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経由でアクセスできないことです。