質問: URLの整形についてお伺いします。 サーバはヘテムル、apacheで、wordpressでサイトを構築しています。 カスタムフィールドで県(prefecture)、ジャンル(genre)を設定し、 http://xxx.com/北海道/イタリアン/my_shop1.html にアクセスした際に http://xxx.com/my_shop1.html?prefecture=北海道&genre=イタリアン で出力されるページにアクセスしたいのです。 アドレスバーには http://xxx.com/北海道/イタリアン/my_shop1.html と表示させたい、ということです(日本語が挟まってくるのは気持ち悪いのですがご要望なのでこのまま参る予定です)。 mod_rewrite を用いるのが良いかと思っているのですが、 OXY NOTES様の「Apacheのmod_rewriteモジュールの使い方を徹底的に解説( http://oxynotes.com/?p=7392 )」 や、「動的URLを静的URL」をキーワードに検索したりした結果、 ``` # BEGIN WordPress RewriteEngine On RewriteBase /xxx.com/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /xxx.com/index.php [L] # END WordPress RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/(.*)/(.*)\.html$ ^$3\.html?a=$1&b=$2 [L] ``` と書いてみたのですがうまく行かず、404になります。 BEGIN WordPress〜END WordPressの部分はwordpressによって自動的に作られた部分です。 抜けや間違い、根本的な勘違いなどご指摘いただければと思います。 よろしくお願いします。 追記(2/19): wordpressのfunctionを使う方法を検討しております。 function authorUrlRewrite(){ add_rewrite_rule('shop/([.*])/([.*])/([.*]).html$' , '$matches[3].html?prefecture=$matches[1]&genre=$matches[2]','top'); } add_action( 'init', 'authorUrlRewrite' ); と記載してみましたがやはり動きません。 お知恵を拝借できないでしょうか。よろしくお願いします。 ★★追記2(2/19) 解決の方法が思い当たらなかったので仕様の方を変えることになりました。 ご回答いただいた方ありがとうございました。 回答のご準備頂いていた方、いらっしゃったら申し訳ありません。 いつかまた同じような問題にぶつかるかもしれませんので改めてお伺いいたします。 ありがとうございました。 ★★★追記3(2/20) 仕様が変わって変わった結果結局やらざらるを得なくなったので継続して調査中です。 こちら http://doshiroutonike.com/web/wordpress/wp-custom/868/ とその参照先 http://www.webdesignleaves.com/wp/wordpress/159/ http://www.warna.info/wp-content/uploads/2012/10/wordbench-chiba20121014.pdf を見ながら function authorUrlRewrite(){ // echo 'done'; add_rewrite_rule('restaurant/([^/]+)/?$', 'index.php?area=$matches[1]', 'top'); } add_action( 'init', 'authorUrlRewrite' ); で、 http://xxxx.jp/test/restaurant/hokkaido で http://xxxx.jp/test/restaurant/?area=$hokkaido の内容が表示できるところまで来ました。 若干、プラグインの内容や設定も変えているので直撃で参考にならないこともあるかもしれませんが、上記3URL、特に大曲様のPDFはこれを理解せずにリライトを進めようとしていたことを申し訳なく思っております。本件未解決ですが、今後同じことでつまずく方いらっしゃったら先にこちらご参照いただくのが良いかと思いました。 引き続き状況記載します。 ★★★★追記4(2/21) おかげさまで自己解決しましたのでコメント追加しております。 ありがとうございました。 ★★★★★追記5(2/22) >何か別の問題が発生しそう ...を解決する課程で、本件そのものの解決策を含めてごく一般的な方法で解決したのでさらに追記しています。
回答: mod_rewriteなら確実だとは思いますが、 私はWordpressならWordpressだけで完結させるのが良いと思っていますので、 add_rewrite_rule()とadd_filter('query_vars', function(){}); を使って実現することをおすすめします。 またサイトの全体構造はわかりませんが 投稿タイプやタクソノミーが複数ある場合、 やろうとしている正規表現だと 例えば http://xxx.com/お知らせ/セール/my_news1.html というページがある場合も http://xxx.com/my_news1.html?prefecture=お知らせ&genre=セール となりますのでもしそうであるならば http://xxx.com/店舗/北海道/イタリアン/my_shop1.html などと正規表現を区別できるようなURLにした方が良いと思います。