WP 2.6 固定ページのパーマリンクで日本語が使えない
-
タイトルと同様の日本語でパーマネントリンク固定ページを作成したが、2.6では、「Not Found」になってしまう。
2.51では大丈夫だったのですが、解決策がわかる方いらっしゃいますか?たとえば、
ってページを作っても「Not Found」になってしまいます。
もちろん、「ほげほげ」はタイトルと異なっても表示しませんでした。
-
サイドバーなどにある固定ページへのリンクができないということでしょうか? WordPress 2.6 では、むしろこちらの挙動が改善されているので、その可能性は低いんですが……。
もし、本文などに
<a href="http://www.example.com/ほげほげ">ほげほげ</a>
という記述をしているならば、ブラウザーによっては適切にリンクできないことがあります。%nn といった URL エンコードされた形でリンクする必要があります。ちなみに、ドメイン名の例示には example.com, example.jp というものが用意されています。hogehoge.jp は実在のドメイン名ですので、あなたが所有されているものでない限り、使わない方が無難です。
ドメイン名の例のご指摘、ありがとうございます。
以後、気をつけます。自分でちょっと検証してみましたら、
パーマリンク設定のカスタム構造で
/%postname%/
としていたので表示ができなかったようです。ポストした記事を
http://www.example.com/ポスト名/で表示させたかったのでそうしたのです。パーマリンク設定のカスタム構造で
ポスト名の上のディレクトリに任意の名前をつけたら、不具合はなくなりました。
/page/%postname%/私の現象でわかったのは、パーマリンク設定のカスタム構造で
/%postname%/ にすると、固定ページのURLのパスが日本語の場合、表示できないということです。
※もちろん、日本語の部分はUTF-8にエンコードされた文字列です。私の現象でわかったのは、パーマリンク設定のカスタム構造で
/%postname%/ にすると、固定ページのURLのパスが日本語の場合、表示できないということです。むむ、そういうパーマリンク構造だったんですか。
英語のパーマリンクだと大丈夫なんですよね? だとすると WordPress の不具合なので、trac に報告する方向ですすめてみます。便乗ですいませんが、似たようなことが起きているので質問です。
パーマリンクをカスタム構造にして
/%category%/%postname%
で使用しています。投稿スラッグは変更せず、日本語を使用して
http://example.jp/category/%82%d9%82%b0%82%d9%82%b0
とした場合投稿画面の「この投稿を表示」をクリックしたらInternet Explorer 6でNot Foundになってしまいます。
URLを見るとURLエンコードが変更されているようでしたが、これはバグでしょうか。
firefox3,opera9.5.2ではちゃんと表示されました。WordPressのバーションは2.6と2.6.1です。
これまだ直ってないですね。
2.9.1でも、404になります。IE限定ですかね?だとすればIEのURLの処理方法に問題があるような気が・・・?
自分の環境(Wordpress mu 2.9.1)でも、同じく固定ページのパーマリンクエラーが出ていましたが、パーマリンク構造を変更したところ日本語スラッグでも動くようになりました。
最初
/%author%/%year%%monthnum%/%post_id%/
にしていて、これを
/%year%%monthnum%/%author%/%post_id%/
に変えると上手くいきました。/archives/%author%/%year%%monthnum%/%post_id%/
のようにしてもやはりエラーになり、なぜか%author%を始めにもってくるとダメなようでした。固定ページへのリンクでは表示されない %author% がなぜエラーに関係しているのか、自分では分かりませんが、もし同様の症状の方がいれば試されてはどうでしょうか?
WP 2.9.2
WP Multibyte Patch 1.1.6以下のようにパーマリンクを設定したところ、同様に日本語スラッグの固定ページの場合パーマリンクエラーが出てしまいました。
/%category%/p%post_id%
Firefox 3.5.8、IE7、Chrome 4で試してみましたが、私の環境ではすべてダメでした。
dontmindtkさんが上手くいったという以下でもダメでした。
/%year%%monthnum%/%author%/%post_id%/
2.7.1から2.9.1にしたところ、同様の問題が発生しましたので、ご報告です。
2.7.1では正常に動いていたページも404になります。
ページ名だけがダメですね。
カテゴリースラッグ、投稿タイトルなどが日本語でも問題ないようです。[NG] http://example.jp/ページ名(エンコード済)
[NG] http://example.jp/parent-page-slug/ページ名(エンコード済)
[OK] http://example.jp/category/カテゴリー名(エンコード済)
[OK] http://example.jp/category/投稿名.html(エンコード済)「アップグレードによる固定ページ404エラー」はローカル・リモートともに再現されたので、環境の問題ではないような気がします。
これまで日本語URLで運用してきてしまったので、真相究明に励みたいところ。
続報があれば報告します。ちょっと試しただけですが 2.9.2 で
http://example.com/ページスラッグ(URLエンコードされた日本語)
とした場合で正常にアクセスできました。
編集ページのページスラッグ欄と同じ文字列(URLエンコードされた日本語)を使っても駄目ということでしょうか?編集ページのページスラッグ欄と同じ文字列(URLエンコードされた日本語)を使っても駄目ということでしょうか?
はい、そうです。
2.9.2に上げてみましたが、ダメでした。
取り急ぎご報告です。コアファイルをいじったところ、状況に進展があったのでご報告です。
再度、問題が発生した状況を整理します。
- WordPress2.7.1から2.9.2へアップグレード
- URLエンコードされた日本語がURLに含まれる固定ページが404エラーで表示されなくなった
- カテゴリーページ、タグページなどに日本語URLが含まれていても問題なく表示されるが、固定ページだけダメ
いじったのは下記のファイルです。
/wp-includes/rewrite.php
このファイルにはWP_Rewriteというクラスが定義されていますが、これのinitメソッドで2.7.1と2.9.2の下記の相違がありました。
2.7.1// Enable generic rules for pages if permalink structure doesn't begin with a wildcard. $structure = ltrim($this->permalink_structure, '/'); if ( $this->using_index_permalinks() ) $structure = ltrim($this->permalink_structure, $this->index . '/'); if ( 0 === strpos($structure, '%postname%') || 0 === strpos($structure, '%category%') || 0 === strpos($structure, '%tag%') || 0 === strpos($structure, '%author%') ) $this->use_verbose_page_rules = true; else $this->use_verbose_page_rules = false;
2.9.2
// Enable generic rules for pages if permalink structure doesn't begin with a wildcard. if ( preg_match("/^[^%]*%(?:postname|category|tag|author)%/", $this->permalink_structure) ) $this->use_verbose_page_rules = true; else $this->use_verbose_page_rules = false;
[^%]
がまずいんじゃないかな?と思ってこの部分を2.7.1に差し替えたところ、これまで表示されなかったURLエンコードされた日本語をURIに含む固定ページが表示されるようになりました。しかしながら、一部の固定ページでリライトに失敗しており、別の個別記事を表示してしまいます。
もうちょっと検証してみますので、ピンと来た方がいらっしゃったら、教えてください。
Takahashi_Fumikiさん
ご報告ありがとうございます。
問題が発生する日本語文字列とそこから生成されるURLを教えていただけないでしょうか?
こちらの環境でも不具合が再現されるか確認してみたいです。>tenpuraさん
パーマリンク設定画面に用意されているパーマリンク構成だと問題ないようです。
ローカル環境で試したところ、カスタム構造で、先頭に数字モノがないパターンが全滅な感じでした。試したこと:
新規ページ作成
・題名: 例
・スラッグ触らず
・URL:http://127.0.0.1/wordpress-29x/%E4%BE%8B/
パーマリンク設定画面にて以下のように設定した上で
http://127.0.0.1/wordpress-29x/%E4%BE%8B/
にアクセス。
FF3.6、IE7とも同じ結果(一応毎回スーパーリロード)・日付と投稿名 –OK
/%year%/%monthnum%/%day%/%postname%/
・月と投稿名 –OK
/%year%/%monthnum%/%postname%/
カスタム構造:
・/%postname%/
–404
・/page/%postname%/
–404 (luvfuku13さんはok @wp2.6.1)
・/%category%/%postname%
–404(aoi7さんはFF3,opera9.5.2ではok)・
/%author%/%year%%monthnum%/%post_id%/
–404
・/%year%%monthnum%/%author%/%post_id%/
–OK (dontmindtkさんok@MU2.9.1、9stepsさん404@WP2.9.2)
・/archives/%author%/%year%%monthnum%/%post_id%/
–404
・/%category%/p%post_id%
–404・
/category/%postname%.html
–404 (高橋さんの設定はこうかな?)
・/%year%/%postname%/
— OK
・/%year%/%author%/%postname%/
— OK
・/%author%/%postname%/
— 404
・/%author%/%year%/%postname%/
— 404
・/%postname%/%post_id%/
–404投稿とカテゴリページについては、次の2パターンしか見なかったのですが、どちらも高橋さんと同じく問題なしで、ページのみ 404 になりました。
・/%postname%/
・/category/%postname%.html
・投稿URI:
http://127.0.0.1/wordpress-29x/no2%E6%8A%95%E7%A8%BF/
(「no2投稿」のURLエンコード)
・カテゴリURI:http://127.0.0.1/wordpress-29x/category/%E6%9C%AA%E5%88%86%E9%A1%9E/
(「未分類」のURLエンコード)環境:
・XAMPP 1.7.3
・Apache 2.2.14 (IPV6 enabled)
・MySQL 5.1.41
・PHP 5.3.1
・Windows Vista × Firefox3.6、IE7
・WordPress 2.9.2 日本語版、プラグイン不使用
- トピック「WP 2.6 固定ページのパーマリンクで日本語が使えない」には新たに返信することはできません。