web-dev-qa-db-ja.com

IP、およびページ固有のリダイレクト?

特定のIPを送信しようとしています。つまり、自分のサイトの1ページを別のページに移動し、.htaccessファイルを使用して送信しようとしています。私はそれを行う方法の多くの一般的な説明を見ました(多くの構文的に異なる方法で)が、率直に言ってそれらのどれも動作しません。私はこれらのコマンドを並べます

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^99\.888\.777\.66$
RewriteRule ^/askedforpage\.html /redirecttopage.html [R,NE,NC] 

私の。htaccessファイルで...しかし、これらのコマンドは私のサイトを機能しないままにします。 OS 10.6.8を搭載したMacでApache 2.2を使用しています。

どうすればいいですか?


これは、悪意のあるIPに対する「拒否」コマンドのない.htaccessファイルです。

Header set Accept-Ranges none   
order allow,deny     
allow from all   
Redirect permanent xyz.html http://xxyyzz.com/header.htm
2
user618

あなたが投稿したコードには、それほど大きな間違いはありません。間違いなく、あなたのコードがあなたのサイトを機能しないままにするようなエラーはありません。現状では構文的に有効です。ただし、行末をチェックして、偽の文字がないことを確認してください-これにより問題が発生する可能性があります。

以下を試してください:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^99\.888\.777\.66$
RewriteRule ^askedforpage\.html /redirecttopage.html [R,NC,L]

RewriteRuleパターンの/(スラッシュ)プレフィックスを削除しました。ディレクトリプレフィックスは、パターンが一致する前にディレクトリごとの.htaccessファイルから削除されます(したがって、URLパターンがスラッシュで始まることはありません)。 NEフラグも削除しました-これは、投稿したコードでは不要です(エラーではありません)。

編集:L(LAST)フラグを追加しましたが、正直なところ、この場合、競合するルールがない限り、違いはあまりありません(または別の).htaccessファイル-あなたの質問からのものではないようです。

一般に、リダイレクトを確立した後に書き換えエンジンでルールを再処理することは望ましくないため、L外部リダイレクトでRewriteRuleフラグを指定する方が確かに一般的です。

0
MrWhite

これは、w3dのアドバイスが正しかったことを報告するためのものです。これを行う方法は

RewriteEngine On  
RewriteCond %{REMOTE_ADDR} ^99\.888\.777\.66$    
RewriteRule ^askedforpage\.html /redirecttopage.html [R,NC,L]

(既にFollowSymLinksをオンにして、mod_rewriteを有効にしました。) "L"(LAST)フラグは重要です!

これらの。htaccessコマンドは、ページ "99.888.777.66"に対するIP askedforpage.html(およびそのIPのみ)によるリクエストを探し、ページ "redirecttopage.html"を返します。代わりに。特に断らない限り、そのIPは他のものを取得できます。

Tip 'o w3dにボウラー。

1
user618