« さくらのレンタルサーバへPEARをインストール | メイン | 携帯サイトで文字化け »

動的ページを静的URLで表示させる(PATH_INFO使用)

400-300.gif
検索システムなど閲覧者が求める情報を動的に表示させるサイトでは、
http://masha.maakikaku.jp/index.php?mode=search&type=hiphop
こんな感じにURLへ?やら&やら引数がだらだらと付いていきます。
サーチエンジン対策上このままじゃあかんということで、
例えば上記のURLを下記の静的URLで表示させるようにしたい。
http://masha.maakikaku.jp/index/search/hiphop.html

これを実現する為には様々な方法があるようなのですが、
ベストの選択は Apache の mod_rewrite を利用する方法のようだ。
が、私が使う 「さくらのレンタルサーバでは、mod_rewriteが利用できない」

・・という情報をどこかで見て何も考えず違う方法でがんばったのだが、
やり終わった後に はっΣ(`Д´;) と思い出しました、
さくら、とりあえず今は mod_rewrite 使えるよね_|\●_
http://faq.sakura.ne.jp/wiki/wiki.cgi?.htaccess#i5
んあー・・なにやってんねんおれ・・一応折角やったのでメモ。。

.htaccess へ FilesMatch を設定し、
phpファイルで PATH_INFO を取得する方法です。

・環境
さくらのレンタルサーバ
Apache 1.3.37
PHP 5.2.1

・目的
サイトのindex.phpを表示させる際、下記の動的なURLを、
http://masha.maakikaku.jp/index.php?mode=search&type=hiphop
以下の静的なURLでもアクセス可能にする。
http://masha.maakikaku.jp/index/search/hiphop.html


■手順1 拡張子の無いパスがPHPとして動作するようApacheへ設定
index という文字を含むURLは、
そのマッチした箇所をPHPのファイルとして認識させるよう、
.htaccess へ以下のコマンドを追加。

<FilesMatch "^index$">
AddType application/x-httpd-php
</FilesMatch>

静的URLを生成したいphpファイルが複数ある場合は、
ひとつずつFilesMatchを設定していかなければならないようだ。


■手順2 PHP側で引数を取得処理
PATH_INFO で ~index/ 以降のURL部分を取得し、
「/」と「.」で $_SERVER["PATH_INFO"] を分割し $param へ代入するよう、
index.phpへ以下のような感じで仕込む。

$param = split("[/\.]", $_SERVER["PATH_INFO"]);

これで $param[0] に search が、$param[1] に hiphop が入る。
(因みに$param[2]には html が入ってる。いらんけど。)


●注意1
この処置を施すと、画像やCSSなどの相対パスがずれる。
URL如何においても表示するファイルをindex.phpへ設定できたものの、
http://masha.maakikaku.jp/index/search/
を基点とした相対パスになってしまうのだ。
パスの指定に絶対パスを使うことで問題は解決はするのだが・・、
相対パスのままどうにかする解決策は見つからなかった。

mod_rewriteを利用した方法だと、
この問題は発生しないようだ。。


●注意2
デフォルトでさくらのPHPは、CGI扱いとして動作している。
すると $_SERVER["PATH_INFO"] が使用できないらしい。
私の場合はPHP5を自分でインストールしたからか?普通に動いた。
もしPATH_INFOが取得できない場合は以下のサイトを参考。
さくらインターネットとmod_rewriteでpukiwikiのSEO対策


●注意3
PATH_INFOに %2F が含まれていると404エラーが発生するらしい。
%2F は /(スラッシュ) のURLエンコードをかけた文字列。
これはApache設定の AllowEncodedSlashes が Off になっているのが原因。
解消するには以下のコードを追加しAllowEncodedSlashesを On にしてやる。

AllowEncodedSlashes On


おつかれさまでした_|\●_


・参考サイト
技林TOP > 自宅サーバ構築メモ > mod_rewrite
動的だけど静的なページの作成 (PATH_INFO)
mod_rewriteでURLをpathinfoベースに変更

AD:

今日のひと言

呑みいきたい!

磨者のはてなブックマーク はてなブックマーク

PHOTO COLLECTION

【WordPress】Ktai Entryをさくらで使う【メール投稿プラグイン】 : Go-PEARを使ったPEARのインストール : PEAR2.gif EmEditor で ダイレクトタグジャンプ : emeditor.gif WindowsXP へ XAMPP をインストール : xammp.jpg 携帯サイトで文字化け : 070707.gif 動的ページを静的URLで表示させる(PATH_INFO使用) : 400-300.gif PHP4でSmarty、tplファイルしか表示されないのは参照渡しが原因でした : php4%2Bsmarty.gif Dreamwerver で Smarty : Macromedia-Dreamweaver.gif MySQLの自動バックアップ phpMyBackupPro : logo.png さくらのレンタルサーバ へ PHP5.2.2 をインストールした : php.gif ダイナミックディスク⇔ベーシックディスクにはまる・・。 : 294574802_636f6f5e8c.jpg
RSS 2.0(XML)

Add to Google
My Yahoo!に追加
ADD TO Hatena::RSS
Subscribe with livedoor Reader

(→RSS/FEEDとは?

CLUB BASE st.215 最新NEWS