【WordPress】trackbackを拒否する方法

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_METHOD} POST
RewriteRule (^|/)trackback/?$ - [F,NC]
</IfModule>

参考:apache - How can I block POST requests to urls ending with /trackback/ in .htaccess? - Stack Overflow

WorpdressのトラックバックURLって、
http://blog.example.com/2016/11/wp-trackback-block.html/trackback/
のような感じで、記事URLの後ろに「/trackback/」と付けるだけになっていて、変更とかもできないようです。

このURLにPOSTするとトラックバックが走るようで、「xmlrpc.php」を海外IPアドレスで拒否してても無意味なようです(ピンバックは拒否出来ている)。

ということで、上記のようなものを .htaccessに書いて拒否します。IP制限したい場合は上記に条件を追記してください。
あと、「xmlrpc.php」を海外IP拒否しているのなら、「wp-trackback.php」も拒否してたほうがよさそうです。

wp-trackback.phpをIP拒否してても、記事URL/trackback/にPOSTすると、トラックバックができていました。ソースを追ってみたけど、追いきれずわからないので、URLにtrackbackが含まれていてPOSTであれば拒否するという路線で対応しました。

ピンバックも含めて、すべて拒否したい場合


Wordpressの管理画面の「設定」->「ディスカッション」のところで、「新しい記事に対し他のブログからの通知 (ピンバック・トラックバック) を受け付ける」のチェックを外すとOKです。ただし、すでに投稿している記事は、1つずつ投稿画面の「ディスカッション」のところのチェックを外す必要があります。

補足

[R] "302 Moved Temporaily"のレスポンスを返しクライアントをリダイレクトする
[L] 条件にマッチした場合そこで判定を終了する(以下に続くRewriteRuleを評価しない)
[NS] 一次的なURLリクエストの場合のみ条件を評価(サーバー内部で発せられるサブリクエストの場合は判定をスキップする)
[N] 書き換えが済んだURLを新たなリクエストとして書き換え処理を再度最初のルールから繰り返す
[C] 次のRewriteRuleと条件を結合する(置換禁止文字列"-"を用いて複数の条件をANDで複合適用する場合に用いる)
[F] マッチしたURLへのアクセスを禁止する(クライアントには"403 Forbidden"のレスポンスが返される)
[P] PROXYモジュールを使用して他のサーバー(URL)にあるコンテンツを取得しその内容をクライントに返す



[NC] 判定パターンで大文字・小文字の区別をしない
Apache : mod_rewriteリファレンス - dawgsdk.org


RewriteRule Flags - Apache HTTP Server Version 2.4

[F,NC]は上記を参考に・・。
Fで、403を返します。

スポンサーリンク

コメントを残す

メールアドレスは公開されません。
また、コメント欄には、必ず日本語を含めてください(スパム対策)。