PCがあれば何でもできる!

へっぽこアラサープログラマーが、覚えたての知識を得意げにお届けします

Wordpress+httpsで、にほんブログ村の新着記事反映に対応する

にほんブログ村での衝撃

最近、Wordpressで新しいサイトを始めたので、試しに老舗ランキングサイトの「にほんブログ村」に登録してみました。

ですが、記事を書いても書いても、にほんブログ村が検知してくれず、全然新着記事としてあがってこない。

設定を見ても間違っていないし、これはおかしいな…と運営に質問してみたのですが、そこで衝撃の事実。

どうやらwordpress.comのドメイン以外、httpsには対応していないらしい…orz

登録している人、みんな素のまま認証してるの!?

いい方法がないか試してみる

にほんブログ村の新着記事の取得方法は至ってシンプル。

  1. RSSのURLをにほんブログ村に登録。

  2. 新着記事投稿後、にほんブログ村にpingを飛ばす。

  3. pingを受けたにほんブログ村が、登録されているRSSから記事を取得。

ということのようです。

そこで、もしかしてRSSがhttpで読めるようになればOKなのかな?と。

実際に試してみたところ、それであっさり新着記事が反映されました。

う〜ん、でもRSS読むのにhttpとhttpsで何が違うんだろうか。非対応な理由が謎すぎる ^^;

RSSだけhttpにした方法

通常、Wordpressは www.example.com/feed/がRSSのURLになるようですが、https対応している場合、httpでアクセスしてもWordpressのsiteurlの設定よって自動でhttpsにリダイレクトしてしまいます。

そこで苦肉の策。

f:id:m_doi2:20160213012413p:plain

こんな感じで、no_sslというディレクトリを作り、feed.phpという新規ファイルを作ります。

feed.phpの内容はこのような感じです。

<?php
$url = 'https://'.$_SERVER['SERVER_NAME'].'/feed/';
$ch = curl_init();
$ch_options = array(
  CURLOPT_URL => $url,
  CURLOPT_HEADER => false,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 60,
  CURLOPT_CUSTOMREQUEST => 'GET',
  // リダイレクトを辿る
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_AUTOREFERER => true,
);
curl_setopt_array($ch, $ch_options);
$response = curl_exec($ch);
curl_close($ch);

header('Content-Type: application/rss+xml');
echo $response;
?>

見ての通り、https://www.example.com/feed/の内容をそのまま表示させているだけです。

デフォルトだとContent-Typeがtext/htmlになってしまうため、rss+xmlで上書きします。

リダイレクトを辿る設定は、念のためのおまじない程度に書いてます。

これで直接的にWordpressと関わらないため、siteurlによるリダイレクトは働きません。

後は、にほんブログ村にhttp://www.example.com/no_ssl/feed.phpをRSSとして登録し、pingを送れば完了です!

※ apache、nginx、.htaccess等、別の所で、http→httpsのリダイレクトを噛ませている場合は、no_sslのディレクトリだけ除外してください。