2009-03-11 4 views

答えて

2

私はこのためにmod_rewriteを使用しています。イメージなどの場合、これは標準です。

RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^https?://myhostname\.com/.*$ [NC] 
RewriteRule \.(gif|jpe?g|png|js|css)$ - [F] 

最後のルールの拡張子リストに "inc"を追加できます。

しかし、特定の種類のファイルへのアクセスを防止するために、私のようなものを好む:

RewriteCond %{THE_REQUEST} ^\w+\ /include/ [OR] 
RewriteCond %{THE_REQUEST} \.php\ HTTP/ 
RewriteRule ^.*$ - [R=404,L] 

をこれは、2つの事柄ん:

  1. 最初のルールが/へのアクセスを除外し、外部の要求からのディレクトリが含まれています依然としてそれらを含む/要求することができます。
  2. 第2の規則は、.phpで終わるファイル名へのアクセスを制限します。 .incファイルに対しても同じことができます。

どちらの場合でも、Apacheは404エラー(ファイルが見つかりません)を返します。一般的に、そこには存在しているが、アクセスすることはできないというより、何かが存在しない(人々には見せたくない)ということが良いです。しかしそれは単に個人的な意見です。

なぜ私は.phpファイルを直接アクセスから制限するのでしょうか。私はmod_rewriteを使って "素敵な" URLを作成します。代わりに:

/account/order.php 

それはです:

/account/order 

これを行うには多くの理由があります。美学は一つです。 SEOは別のものです(/account/order.php?item=123の代わりに/ account/order/123がある場合)。

+0

あなたが保護しようとしている内容に応じて、代わりにそれはありませんあります、仕事やハニーポットに人々をリードしていないバリアントを返すと言って。フィッシングサイトがあなたの複製を阻止しようとしていますか? –

3
​​

mod_rewriteがインストールされていない場合に便利です。

+0

これは通常の方法であり、書き換えはまったく必要ありません。 〜の代わりに ""という構文が使用されるようになりました。 – bobince

0

私はファイルへのアクセスを禁止するよりも、ファイルを隠したいと思っています。したがって私はすでに述べたcletusとして404ステータスコード(Apache 2.2以降)で応答するmod_rewriteソリューションを好んでいます。しかし、私は、mod_rewriteがByronとして言及されていない場合、フォールバックを使用します。

はそれでは、両方を組み合わせてみましょう:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    # .inc files 
    RewriteRule \.inc(/|$) - [L,R=404] 
    # URI paths starting with /include/ 
    RewriteRule ^include/ - [L,R=404] 
</IfModule> 
<IfModule !mod_rewrite.c> 
    <Files ~ "\.inc$"> 
     Order allow,deny 
     Deny from all 
    </Files> 
</IfModule> 
関連する問題