Hyper Estraier で WordPress をクロールしようとしたところ
redirected: 301 されてしまいインデックスされない 🙁
$ estwaver crawl -revcont casket 2014-05-15T03:40:17Z INFO DB-EVENT: status: name=casket/_index dnum=0 wnum=0 fsiz=9259055 crnum=0 csiz=0 dknum=0 2014-05-15T03:40:17Z INFO crawling started (revcont) 2014-05-15T03:40:17Z INFO fetching: 0: https://www.yonageya.com/ 2014-05-15T03:40:17Z INFO seeding: 1.000: https://www.yonageya.com/ 2014-05-15T03:40:17Z INFO [1]: fetching: 0: https://www.yonageya.com/ 2014-05-15T03:40:18Z INFO [2]: fetching: 1: https://www.yonageya.com/blog/ 2014-05-15T03:40:18Z INFO [2]: redirected: 301: https://www.yonageya.com/blog/ 2014-05-15T03:40:18Z INFO waiting for threads: 0 2014-05-15T03:40:18Z INFO crawling finished 2014-05-15T03:40:18Z INFO DB-EVENT: flushing index words: name=casket/_index dnum=1 wnum=1 fsiz=9262217 crnum=670 csiz=45533 dknum=0 2014-05-15T03:40:18Z INFO DB-EVENT: flushing auxiliary keywords: name=casket/_index dnum=1 wnum=639 fsiz=9262217 crnum=31 csiz=2182 dknum=0 2014-05-15T03:40:18Z INFO DB-EVENT: closing: name=casket/_index dnum=1 wnum=639 fsiz=9274906 crnum=0 csiz=0 dknum=0 2014-05-15T03:40:18Z INFO finished successfully
301 部分だけ抜き出すと
[2]: redirected: 301: https://www.yonageya.com/blog/
ネットで調べたところ同じ状況の方がいらっしゃいました。
ヒントにさせていただき、調べてみたところ wp-includes/canonical.php に辿り着きました。
/** * Filter the canonical redirect URL. * * Returning false to this filter will cancel the redirect. * * @since 2.3.0 * * @param string $redirect_url The redirect URL. * @param string $requested_url The requested URL. */ $redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url ); if ( !$redirect_url || $redirect_url == $requested_url ) // yes, again -- in case the filter aborted the request return false; if ( $do_redirect ) { // protect against chained redirects if ( !redirect_canonical($redirect_url, false) ) { wp_redirect($redirect_url, 301); exit(); } else { // Debug // die("1: $redirect_url<br />2: " . redirect_canonical( $redirect_url, false ) ); return false; } } else { return $redirect_url; }
$redirect_url と $requested_url を比較して同じだったらリダイレクトしないようですが、
実際に $redirect_url と $requested_url を調べてみたところ、
$redirect_url: https://www.yonageya.com/blog/ $requested_url: https://www.yonageya.com:80/blog/
とウチのブログの場合、$requested_url にポート番号がくっついていました ❗
ポート番号をくっつけているのは、同じ wp-includes/canonical.php の以下です。
if ( !$requested_url ) { // build the URL in the address bar $requested_url = is_ssl() ? 'https://' : 'http://'; $requested_url .= $_SERVER['HTTP_HOST']; $requested_url .= $_SERVER['REQUEST_URI']; }
ウチのブログの場合 $_SERVER[‘HTTP_HOST’] にポート番号がくっついていました。
そして、同じ状況の方と同じように $requested_url .= ‘www.yonageya.com’ とすると解決する事も確認しました。
それで、どうやって解決するか対応方法に悩みましたが、functions.php に以下を追加して対応しました。
function my_redirect_canonical($redirect_url, $requested_url) { if (preg_match('/^HyperEstraier/', $_SERVER['HTTP_USER_AGENT'])) { return false; } } add_filter('redirect_canonical', 'my_redirect_canonical');
強引ですが