Yuriko.Net 個別記事

非標準 URL で不正なリダイレクト
Ktai Style を WordPress 2.3 以降で使った場合、「標準 URL (canonical URL) としてリダイレクトする飛び先が不正になる」というバグがあることが分かりました。例えば、http://example.jp/?cat=3 をリクエストしたら http://example.jp/category/living/ に正規化される場合、Ktai Style では http://example.jp/://example.jp/category/living/ となってしまいます。当然 Not Found になります。
WordPress はパーマリンクを設定していてもクエリー文字列を使った URL でアクセスできるため、WordPress 2.3 以降、パーマリンクを使った URL を強制させるべく、非標準の URL を (クエリー文字列を使った URL など) を標準 URL (パーマリンクを使った URL など) にリダイレクトする仕組みがあります。例えば、living カテゴリー (ID:3) のアーカイブは http://example.jp/category/living/ が標準 URL となります。クエリー文字列を使った http://example.jp/?cat=3 でもアクセスできますが、これは前者の URL にリダイレクトされるのです。しかし、Ktai Style では、「URL のホスト部分を削除する」というフィルターを入れているため、その副作用で「スキーム文字列」 (http の部分) だけ落ちてしまい、「://example.jp/category/living/」がリダイレクト先になってしまいます。この場合、カレント URL が補われて「http://example.jp/://example.jp/category/living/」にジャンプしようとするわけです。
「MT4i みたいに、カテゴリーのポップアップメニュー (プルダウンメニュー) を付けたい」というカスタマイズをした場合、プルダウンで選んだカテゴリーアーカイブは非標準の URL のため、標準 URL にリダイレクトされます。カスタマイズを紹介した時点では問題なく動作していたはずなので、それ以後のバージョンアップで不具合が出てしまったようです。
一応対策コードを作ってみましたが、redirect_canonical()
が出力するリダイレクト先 URL が不正だったら直すという対処療法的なものです。これだと、対策コードが想定しない不正な URL が来た場合はそのまま通ってしまいます。といって、「URL のホスト部分を削除するフィルター」をなくしてしまうとパケット削減効果が落ちてしまいます。「携帯電話では非標準の URL がリクエストされることは少ない」と考えて、この対策で進めましょうか。
さほど致命的なバグだとは思っていませんので、これの修正を入れたバージョン 1.36 のリリースは、しばらくお待ちください。6月中には出す予定です。Ktai Style 1.50-test3 の方は、redportal テーマに PHP 構文エラーがあるという致命的なバグがあるので、早期に修正版を出したいのですが、他にも調整したい部分がありますので、数日お待ちください。