2010-12-07 4 views
2

私はアプリケーションのPHPファイルをdocrootの上に保存するのが好きです。この偽のドキュメントルートは薄すぎますか?

しかし、私の共有ホストにもたくさんの罠があります。うんざりしているように見えます。 .htaccessファイルがこれを含ま

私はこれをやって思っていた

...

users/alex/public_html/ 
- .htaccess 
- application/ 
- system/ 

users/alex/public_html/www/ 
- index.php 
- assets/css 
- assets/js 

...

RewriteEngine On 
RewriteRule .* www/$0 

だから、私のWebルートへのすべての要求は黙っwww/に書き換えされていますフォルダ。

これは薄すぎますか?

+0

ことに関しては、私は次の変更を行うことをお勧めしたいです「フレーク」の意味ですか?また、いくつかのルールを追加することなく、あなたのパブリックコンテンツは 'example.com/www/index.php'などで見ることができます。大きな問題ではありませんが、特定のページを1つの有効なURLに制限することが望ましい場合があります。 –

+0

@Tim Stone申し訳ありませんが、どういうリスクがありますか?* – alex

答えて

2

本当に危険が伴うとは思わない。基本的には、Webサーバーへのアクセスをドキュメントルートに限定するのと同じように、Webサーバーに同じ信頼を置いています。しかし、考慮すべき点がいくつかあります。

最初に、.htaccessファイルのmod_rewriteルールセットは、特定性に関して選択的に評価されます。 URLが/category/path/であり、次のディレクトリ構造(すべての.htaccessファイルにmod_rewriteルールセットがあることが前提)の場合、.htaccessファイルはパス/に評価されます。

 
public_html/ 
|- .htaccess 
|- category/ 
    |- .htaccess 
    |- path/ 
     |- .htaccess 

これはなぜ問題なのですか?ドキュメントルートの上にあると想定されていたアプリケーションフォルダの1つに.htaccessファイルがある場合は、それに少なくともRewriteEngine Onが含まれていると仮定すると、ルート.htaccessファイルのRewriteRuleは適用されません。しかし、これは簡単に避けられます。

リクエスト(静的リソース用のリクエストを含む)はすべて、.htaccessファイルの解析にかかるオーバーヘッドを招くだけでなく、少なくとも1つの内部リダイレクトも行います。このオーバーヘッドは非常に重要であるとは考えていませんが、サイトのトラフィックが多い場合は、(軽度)顕著な影響を与える可能性があります。しかし、その時点では、とにかくより柔軟なホスティングに適しているため、このプロセスが不要になります。

これらの問題を念頭に置いて、効果的なドキュメントルートを変更するために書き直しを行うのは、あなたが悪いことではないと思います。何らかの理由で.htaccessファイルを壊してしまったとしても、mod_rewriteは設定が無効な場合に内部サーバエラーを投げます。あなたの唯一の懸案事項は、あなたが期待した以外の何かをしたルールでしょう。あなたは何

/.htaccess

RewriteEngine On 

RewriteRule .* /www/$0 

/www/.htaccess

RewriteEngine On 

# Check if the original request was to /www/something and redirect 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/www/ 
RewriteRule .* /$0 [R=301,L] 

# The rest of your rules... 
+0

多くのありがとうTim! – alex

+0

@alexお手伝いします。私はルールセットをテストしなかったので、もしあなたがそれを使うことを選ぶならば、何か問題があるかどうか教えてください。ここからうまくいくように見えますが、私はいつもタイプミスを起こすことが知られていました。 –

+0

@Tim Stone私は '/ www/assets/css/common.css'のようなものがアクセスされることを避けようとしています。しかし、私はそれに合っていないと思う。また、最後のRewriteRuleについては、 '^'を '。*'に変更しました。 – alex

関連する問題