これはStackExchangeに関する私の最初の質問ですので、ご了承ください。現在の設定の簡単な内訳を以下に示します。
https://www.example.dk
とhttps://www.example.de
であると仮定しましょう問題は、/ not_foundのヒット(中国、インド、パキスタンなど)からクレイジーな量を取得していることです。 bothドメイン名のURLの末尾、可能なすべての形式:
https://www.example....../not_found
)https://example....../not_found
)http://www.example....../not_found
)http://eksemp....../not_found
)私にとって、この独特のパターンは、特にサイトのコンテンツがデンマーク語またはドイツ語で書かれていることを考慮すると、脆弱性スキャンの試みに他ならないようです。さらに、ウェブサイトは特定のデンマーク語、またはドイツのターゲットグループに対応しているため、ウェブサイトがこれらのアジア諸国からの訪問者に訪れる価値はほとんどありません。現在、サーバーの応答は、使用しているWordPressテーマによって提供される404-not foundページです。実際に存在しない場合。
長い話は短くなりましたが、指定されたURLが存在しないため、404ページではなく403-forbiddenページをWebサーバーに強制的に出力させる方法を見つけるために過去数日間苦労しましたサーバー上。
正規表現 を作成し、.htaccess
ファイルで上記のすべてのシナリオをカバーするパターンとして使用することを目指しています(各ドメイン名に4つ)。 .htaccessに配置したコードの部分は次のようになります
# BEGIN /not_found blocking
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(https{0,1}:\/\/)(www\.){0,1}(example\.dk|example\.de){1}(\/not_found){1}$
RewriteRule . - [R=403,NC]
</IfModule>
# END /not_found blocking
残念ながら、403 Access Forbiddenの代わりに404-not foundエラーページが表示されるため、機能しません。それは私のせいでしょうが、その理由は何ですか?
どんな助けも大歓迎です。どうもありがとう!
RewriteCond %{REQUEST_URI} ^(https{0,1}:\/\/)(www\.){0,1}(eksempelhjemmeside\.dk|eksempelhjemmeside\.de){1}(\/not_found){1}$ RewriteRule . - [R=403,NC]
あなたはここで物事を過度に複雑にしているように見えるでしょう。 REQUEST_URI
サーバー変数には、URLパスのみが含まれます。 /not-found
。そして、これがあなたが心配しているように見えるすべてです。ドメインを確認する必要はありません。www/ non-www、HTTP/HTTPS、とにかくすべてのバリエーションを一致させたいようです。あなたがキャッチしたくない他のサブドメインなどがない限り? (しかし、その場合、ターゲットよりも例外を一致させる方が簡単かもしれません?)
ただし、コメントで@closetnocが示唆したように、これらのリクエストに対しては単純な「404 Not Found」を返します。 「シンプル」とは、デフォルトのApache 404を意味するため、WordPressを介してリクエストを渡すのではなく、早期に失敗します。これは現在行われていることです。したがって、必要なのは次のようなものだけですbefore the WordPress front-controller:
# BLOCK /not_found
RewriteRule ^not_found$ - [R=404]
<IfModule>
ラッパー、RewriteEngine
ディレクティブ(WPブロックに既に含まれているため)、またはRewriteCond
ディレクティブは不要です。 3xx以外のステータスコードを指定する場合、L
(last
)フラグも必要ありません(暗黙的です)。
/NoT_FounD
や/NOT_FOUND
などのリクエストを取得する場合は、NC
(nocase
)フラグを含めることができますが、それ以外の場合は省略します。
.htaccess
では、RewriteRule
patternと一致するURLパスにスラッシュプレフィックスが含まれないことに注意してください。したがって、パターン^not_found$
は、URL /not_found
とのみ一致します。
academic excerciseとして、404ではなく「403 Forbidden」を返したい場合は、上記のディレクティブを次のように変更します。
RewriteRule ^not_found$ - [F]
繰り返しますが、L
フラグを使用する場合は、F
フラグは不要です。または、代わりにR=403
と書くこともできますが、F
が推奨されるショートカットです。
このhtaccessコードを使用して、URLから特定の単語を削除し、ホームページにリダイレクトします。あなたの状況に合わせて修正しました。このバージョンはテストしていませんが、動作するはずです。アンダースコアのために何か特別なことをする必要があるかどうかはわかりません。
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)not_found(.*)$ $1$2 [R=301,L]
/ not_foundページを作成し、phpでヘッダーステータスを403に設定するだけで済みます。
header('HTTP/1.0 403 Forbidden');
echo 'You are forbidden!';