web-dev-qa-db-ja.com

.htaccessに同じ文字を含むURLに対して410の状態コードを返す

私のウェブサイトは、数百のURLを作成する製薬会社のスパム攻撃に見舞われ、そのすべてに最後の5文字-1234.pdfが含まれています。

Googleや他の検索エンジンがこれらをより迅速に削除するように、これらのページを410/GONEステータスコードで返したいのですが、.htaccessでこれを行う簡単な方法は、すべてのURLをリストする以外にあります。 1つ1つにRewriteRulesを設定する(かなりの時間がかかるプロセス!)

2
Sam

-1234.pdfというリテラル文字列で終わるすべてのURLに410 Goneを提供するには、.htaccessファイルの先頭で次のmod_rewriteディレクティブを使用できます。

RewriteEngine On

RewriteRule -1234\.pdf$ - [G]

または、-NNNN.pdfで終わるURLを拒否するには、NNNNが少なくとも4桁の数字である場合、RewriteRulepattern-\d{4,}\.pdf$のようなものに変更できます。

しかし、URLは引き続き404を返します。

サーバーがカスタム410 ErrorDocumentを定義し、HTTP応答コードを上書きしている場合は、.htaccessファイルの先頭に次のように設定します(後で.htaccessファイルまたはサーバーでカスタム410 ErrorDocumentを自分で定義していないことを確認してくださいconfig):

ErrorDocument 410 default

PDATE:文字列 "stmap_9874100.html"(最後の3桁は常に異なる)を持つ他のスパムURLもいくつかありますが、これらのURLを410に設定するために同様のクエリを作成できますか?

はい、前と同様の別のディレクティブを追加できます。

RewriteRule stmap_9874\d{3}\.html$ - [G]

RewriteRulepattern(regex /正規表現)およびディレクティブの説明:

  • stmap_9874-これらの文字は文字通り(URLパス内の任意の場所)に一致します。

  • \dは任意の数字(0〜9)を表す省略文字クラスであり、\d{3}はその3つです。

  • \.はリテラルのドットに一致します。それ以外の場合、正規表現のドットは任意の文字に一致します(改行を除く)。

  • html-これらの文字は文字通り一致します。

  • $は、文字列の終わりを表す「アンカー」です。したがって、この文字列はURLパスの最後にある必要があります。

  • -(ハイフン)-正規表現の一部ではありません。これはRewriteRuleディレクティブの2番目の引数です。これは単なる「プレースホルダー」であり、置換がないことを示します。 URLが他の場所に書き換えられたりリダイレクトされたりすることはありません。

  • Gフラグ(R=410の略)は、410 Gone応答を返します。 (ここでは、Lフラグは不要です。これは、3xx(および2xx)の範囲外の応答コードを指定するときに暗黙的に指定されるためです。)

1
MrWhite