以下の内容はhttps://miau.hatenablog.com/entry/20101106/1289047912より取得しました。


Apache で .svn を見えなくする設定を 3 種類ほど

以前 本番サーバにチェックアウトしちゃダメですか? - miauの避難所

もちろん .svnApache 側の設定でアクセス不可にしておきます。

とか書いたんですけど、具体的な方法を書いてませんでした。今回ちょっといじる機会があったのでまとめておきます。

Apache 2.2.3 で動作確認しています。

1. DirectoryMatch

mod_access でアクセス制限をかける方法。Subversion の FAQ に載っている方法もこちらです。

# <Directory ~ "/\.svn/">〜</Directory> でも可
<DirectoryMatch "/\.svn/">
    Order deny,allow
    Deny from all
</DirectoryMatch>

FAQ の例は "^/.*/\.svn/" になっていたんですが、正規表現は部分一致のようなのでシンプルなものに変えています。元の例だと DocumentRoot を / にしている場合(ないでしょうけど)に /.svn が見えちゃいますしね。

今までこの方法で対策していたんですが、Directory やら Location やらは適用順序が面倒ですし(セクションの設定 - セクションのマージ方法 のページを何度参照したことか・・・)、他に IP アドレスの制御なんかもやりたいのに Satisfy Any にすると .svn が見えてしまったりとか、何かと取り回しが面倒なので、他の方法に切り替えようかと。

2. RewriteRule

mod_rewrite を使っているので、このモジュールが有効でないと使えません。(レンタルサーバなんかだと怪しいかも?)

RewriteEngine On
RewriteRule /\.svn(/|$) - [F]

みたいな感じ。こちらも正規表現は部分一致なのでこの書き方で OK。[F,L] って書いてる例も見かけたけど、Forbidden を返す場合はその場で判定が終了するので L は不要なはず。(明示したほうがわかりやすいのかな?)

これはこれでいいんですが、Passenger(2.2.11)で Rails を動かしていると、Rails 配下のディレクトリについてこの設定は有効にならない模様。内部的に mod_rewrite 的な処理やキャッシュの処理を行っているらしいので、そちらが先に行われてしまうとかですかね・・・。

ちなみに古い情報だと「Passenger は mod_write や mod_alias と衝突する」という話もあったみたいですけど、その後互換性が向上しているので PassengerHighPerformance を on にしない限りは問題ないらしいです。

とりあえず今回は Passenger を使いたいので、別の方法でいこうと思います。

3. RedirectMatch

mod_alias を使う方法と。

RedirectMatch 403 /\.svn(/|$)

こちらも正規表現は部分一致。Passenger を使っていても動作するようですし、404 を返したいような場合に簡単に差し替えが効きますので、今後はこれでいこうかなと。

あと自分用のメモなんですけど、mod_rewrite と併用する場合は mod_rewrite のほうが先に動作するようなので要注意と。以下の URL にいろいろ書いてました。

その他

.svn だけでなく隠しディレクトリ全てを見えなくしたり、いろいろな流派があるみたいです。その辺りは好みに合わせて変更してください。

あと Passenger のケースのように他のモジュールとの絡み等で動作が異なる場合があるので、ちゃんと .svn や配下のファイル(.svn/entries とか)にアクセスして動作確認しておきましょう。




以上の内容はhttps://miau.hatenablog.com/entry/20101106/1289047912より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14