WodrPressのピンバックURLが200バイト制限で「400 Bad Request」になる問題

WordPressには記事を参考にしましたというピンバック機能があり、自サイト内でもその機能が有効になっています。先日、ふと自分のピンバックURLをクリックすると「400 Bad Request」と表示されました。いくつかのURLをクリックしてみましたが「400 Bad Request」です。

このブログはパーマリンクを日本語利用しているため、URLが長くなっています。この記事のパーマリンクの長さは238バイトで、WordPressのURL制限が200バイトとなっているため、データベースには200バイトまで登録され、38バイトは切り取られてしまいます。

本当のURL

http://takahitokikuchi.poitan.net/2012/10/02/wodrpress%E3%81%AE%E3%83%94%E3%83%B3%E3%83%90%E3%83%83%E3%82%AFurl%E3%81%8C200%E3%83%90%E3%82%A4%E3%83%88%E5%88%B6%E9%99%90%E3%81%A7%E3%80%8C400-bad-request%E3%80%8D%E3%81%AB%E3%81%AA%E3%82%8B/

データベース内のURL

http://takahitokikuchi.poitan.net/2012/10/02/wodrpress%E3%81%AE%E3%83%94%E3%83%B3%E3%83%90%E3%83%83%E3%82%AFurl%E3%81%8C200%E3%83%90%E3%82%A4%E3%83%88%E5%88%B6%E9%99%90%E3%81%A7%E3%80%8C400-bad-reques

これをどのように対応しようかと考えました。データベースのvarchar(200)をもっと大きな容量にすると、WordPressのアップデートの時にはまた元に戻ってしまい、結局201バイト以上の文字列はカットされてしまいます。

そこで、ピンバックの表示している箇所を変更することにしました。ピンバックの表示は、WordPressの「外観」メニューから「テーマ編集」を開き、「function.php」にありました。下記の箇所でピンバックが表示されています。

<?php comment_author_link(); ?>

この場合はリンクを編集できませんので、これをリンクURLとリンク文言に分けます。リンクURLは変数として使いたいため、「comment_author_url();」を使います。上記コードを、下記に置き換えても全く同じ結果になるはずです。

<a href="<?php echo comment_author_url(); ?>"><?php comment_author(); ?></a>

この「comment_author_url();」を処理します。マルチバイトURLをエンコードした場合は「%E3%82%AB%E3%83%BC%E3%83%89」のようになり、URLが「%+1文字」または「%」で終わっている場合が「400 Bad Request」となりますので、これを除外すれば良さそうです。

$commenturl = get_comment_author_url();
$commenturl = preg_replace ('/(%[a-f0-9]{1}|%)+$/i', '', $commenturl);
<a href="<?php echo $commenturl; ?>"><?php comment_author(); ?></a>

2行目で、「末尾が%+1文字(16進数)となっているもの」「%で終わっているもの」を削除しています。この$commenturlは加工され短くなりますが、前方一致で正しいリンクに301リダイレクトしてくれますので、リンクとしては問題ありません。

実際にヘッダ情報を見てみると以下のようになっています。

ピンバックが下記の場合

http://takahitokikuchi.poitan.net/2012/09/28/ana%e3%83%9e%e3%82%a4%e3%83%ab%e3%81%b8%e3%81%ae%e4%ba%a4%e6%8f%9b%e3%81%a7%e3%82%82%e9%82%84%e5%85%83%e7%8e%87%e3%81%8c%e9%ab%98%e3%81%8f%e3%81%aa%e3%82

正しいURLへ301リダイレクト

HTTP/1.1 301 Moved Permanently
Location: http://takahitokikuchi.poitan.net/2012/09/28/ana%e3%83%9e%e3%82%a4%e3%83%ab%e3%81%b8%e3%81%ae%e4%ba%a4%e6%8f%9b%e3%81%a7%e3%82%82%e9%82%84%e5%85%83%e7%8e%87%e3%81%8c%e9%ab%98%e3%81%8f%e3%81%aa%e3%82%8b%e3%80%8cec%e3%83%8a%e3%83%93%e3%82%ab/

WodrPressのピンバックURLが200バイト制限で「400 Bad Request」になる問題” への3件のコメント

  1. ピンバック:400 Bad Requestを.htaccessでは処理できない | 菊地崇仁ブログ「ポイ探社長のブログ」

  2. ピンバック:パーマリンクが長いとピンバックが・・・ | このサイトのこと。 | クイズネタ

  3. ピンバック:パーマリンクが長いとピンバックが・・・ | クイズ王の部屋

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください