CentOs4.4でapache2.xを使用しています。
PHPであるフレームワークを使っていています。
サイト内のページの全てのURLがフロントコントローラとなってしまうため、mod_rewriteを使用して、静的ページっぽく見せたく思っています。
また、アクション名は、GETのaction=*****です。
ただ、ページによっては、アクション名以外のGET値も使用するので、それに関しては、通常通り$_GET['string']が取得できるようにしたいです。(詳細は、例3を見てください。)
例1)
現状:
http://example.com/index.php?action=View
理想:
http://example.com/View/
例2)
現状:
http://example.com/index.php?action=View_List_Search_From_Key
理想:
http://example.com/View/List/Search/From/Key/
例3)
現状:
http://example.com/index.php?action=View_List_Search_From_Key&keyword=searchword&page=3
理想:
http://example.com/View/List/Search/From/Key/?keyword=searchword&page=3
これらを実現させるための.htaccessの書き方を教えてください。
※最後の/は、別に無くても良いです。
※例3は、取得したいGET値を?からスタートしていますが、他の方法でも構いません。
スクリプトの中で、GET値を正常に取得できればいいです。
これでどうでしょうか。
RewriteEngine On
RewriteRule ^/View/$ /index.php\?action=View [P,L]
RewriteRule ^/View/List/Search/From/Key/$ /index.php?action=View_List_Search_From_Key [P,L]
RewriteRule ^/View/List/Search/From/Key/\?(.+)$ /index.php?action=View_List_Search_From_Key&$1 [P,L]
こんなのでどうでしょうか?
RewriteRule ^(.+)/([^/]+)/?$ $1_$2
RewriteRule ^View([^/]+)?$ index.php?action=View$1&%{QUERY_STRING}
最後の / を _ に置き換え、それを繰り返せいいと思ったのですが、それではうまく動作しませんでした。試行錯誤の末、辿り着いたのですが、チョット説明出来ません。
うちのMac(apache 1.3.33 php4.4.4)ではうまくいっているようですが...
ある程度うまくいったのですが、
上記にも書いたとおり、アクション名は必ずViewから始まるわけでもないのです。
というわけで、教えていただいた方法から^Viewを取ったのですが、画像関係もRewriteされてしまい、うまくいきませんでした。
思っていた以上に難しいですね。。。
なるほど、ありがとうございます。
この方法でも実現できそうなのですが、ちょっとニュアンスが違います。
アクション名は、ページ名のようなモノで、例に挙げた以上に沢山あります。
なので、View_List_Search_From_Keyのように固定ではなく、
Sample_Hoge_Fuga
のようにページ毎に変化していきます。