1

.htaccess ファイルで IP ブロックを拒否/許可する前にリダイレクトを適用することはできますか?

以下を試してみましたが、リダイレクトの代わりにホワイトリストに登録されていないユーザーがブロックされたため、リダイレクトする必要がある場合でも拒否/許可部分が実行されたことを意味します。IP ブロッキングなしでテストしたところ、リダイレクト部分は正常に動作しています。リライトの [L] フラグは、IP ブロッキング部分に到達する前に .htaccess の実行を「停止」すると予想していました。

RewriteCond %{HTTP_HOST} !^blog\.mysite\.com$ [NC]
RewriteRule (.*) http://www.mysite.com [L,NC,R=301]

Order deny,allow
Deny from all
Allow from xxx.xxx.xxx.xxx

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

私がこれを行う理由は、他の無効なページに対してサイトで表示されるのと同じ 404 を表示しながら、 http://www.mysite.com/blogへのアクセスを保護する必要があるためです。最初に IP ブロックを行うと、サイト フレームワークによって生成された同じ 404 ページを表示できません。

私は何か間違ったことをしていますか、それともこのようにすることはできませんか?

4

1 に答える 1

2

書き換え条件を使用して IP アドレスを確認できます。

RewriteEngine On
RewriteBase /

#always redirect blog.mysite.com to www.mysite.com
RewriteCond %{HTTP_HOST} ^blog\.mysite\.com$ [NC]
RewriteRule (.*) http://www.mysite.com [L,NC,R=302]

#don't redirect if the accessDenied.php page is accessed
RewriteCond %{REQUEST_FILENAME} ^accessDenied\.php$
RewriteRule (.*) - [L]

#redirect all not whitelisted IPs
RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111 [or]
RewriteCond %{REMOTE_ADDR} !^222\.222\.222\.222
RewriteRule (.*) accessDenied.php [R=302,L]

#only whitelisted IPs will use this rewrite rule
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?/$1 [L,R=302]

IP が一致する場合、2 番目の書き換えルールは満たされないため、何も起こりません。ただし、IP が一致しない場合、ユーザーは 404 エラー ページにリダイレクトされます。

于 2013-05-20T10:35:54.423 に答える