2010-11-18 8 views
0

私は特定のイベントでhtaccessを拒否するsomeones ipをブロックするスクリプトを持っています。 これはコードです:私は何をしたいが代わりにあるODこのユーザーから拒否しかしedit htaccess via php

file_put_contents('.htaccess', 'deny from ' . $_SERVER['REMOTE_ADDR'] . "\n", FILE_APPEND); 

私はそれが別のページにユーザーをリダイレクトすることができます。

私は経由でこれを行うことができます。

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REMOTE_HOST} !^123\.45\.67\.89 
RewriteRule \.html$ /alternate_page.html [R=302,L] 

しかし、それはhtaccessファイルを開くと、それに追加することなく、それを行うことが可能です。代わりにthe file_put_contents関数を使用してください。

ありがとうございます。あなたは何ができるか

+0

あなたが何をしていても、これを同時にしようとしている可能性のある複数のスクリプトを同期させて、壊れた '.htaccess'ファイルを作成せずに誰でもHTTP 500エラーを吐き出さないようにしてください。 – cdhowie

+0

どうすればいいのですか – DonJuma

答えて

0

データベースで許可したくないIPアドレスを保存することをお勧めします。これは管理を行い、統計情報が必要な場合は簡単に追加することもできます(つまり、このユーザーが拒否された後にサイトにアクセスしようとした回数など)。必要に応じて、特定のIPを別の場所に送信することもできます。

  • ストアデータベーステーブル内のIPアドレス
  • ユーザーが自分のIPがテーブルにあるかどうかを確認するためにページのチェックに来る
  • ので統計に(必要に応じて)カウンタをインクリメントしてにユーザーをリダイレクトする場合新しい場所
  • または現在のページをロードし続ける

使用PHPのHeader functionHeader('Location: [url here]');それらをリダイレクトし、他のコンテンツがページに送信される前に、それがなければなりません覚えておきます。

0

このようなあなたの.htaccessファイルを持っている:

Options +FollowSymLinks 
RewriteEngine on 
# ADD RULES HERE 
RewriteCond x x # This is a dummy condition that is always true 
RewriteRule \.html$ /aternate_page.html [R=302,L] 

その後、あなたはこのようなあなたの交換作業を持つことができます。

<?php 
file_put_contents(".htaccess",str_replace("# ADD RULES HERE","# ADD RULES HERE\nRewriteCond %{REMOTE_HOST} ^".$_SERVER['REMOTE_ADDR']."$",file_get_contents(".htaccess")); 
?> 

HTH
(編集:これは」doesnのしかし、少し編集が必要な場合があります。一般的な考え方が役立つことを望みます。)

+0

はい、最初のものの後にもう1つのダミーを編集する必要はありません – DonJuma

+0

いいえ、ダミーのものはまだそこにあります。私はまだ私が書いたコードに何か問題があると思っていますが、私は=/ –

0

適切な方法は、ゲートキーパーfunctio nは、IPをチェックし、要求を必要なページに転送します。

<?php 

header('Location: http://www.yoursite.com/new_page.php'); 

?> 

HTMLタグや空白などの出力がブラウザに送信される前に、これを呼び出す必要があります。一般的な方法は、ヘッダーコマンドをラップする 'forward'関数を用意し、コンテンツを送信する前に最初にコントロールにアクセスすることです。

3

あなたはちょうどあなたが$_SERVER['REMOTE_ADDR']から何を得るに基づいてlocationheaderを使用し、他のページにユーザーをリダイレクトするための.htaccessファイルを使用する必要はありません。

header("Location: http://anothersite.com") 

とPHPから(これを忘れないでください手動):

)は(そのヘッダを覚えて任意の実際の出力が送信される前に、 呼び出さなければなりません、 いずれかの通常のHTMLタグによって、ファイル内の空白 行、またはPHPから。 include()、require()、関数、または 別のファイルアクセス関数を使用してコードを読み取って、 の空白または空白行があり、header()が呼び出される前に出力されることがよくあります。

+1

+1 OPがウェブホスト(CPanelのようなもの)の設定を自動化しようとしていない限り、スクリプトをリダイレクトすることは確かです行く道。 – deceze