通常PHPなどのCGIを使ったWEBシステムではURLにGETパラメータを指定する場合

http://www.test.net/indexphp?action=aaaa&module=bbbb

のように指定しますが、このようなURLの形式はGoogleなどの検索エンジンには好まれないようです。
MojaviではこのようなURL形式を

http://www.test.net/action/aaaa/module/bbbb/

のようにパラメータ部分を/で接続してあたかもフォルダ名のように見せかけることができます。

config.phpの変更

/**
* The format in which URLs are generated.
*
* 1 = GET format
* 2 = PATH format
*
* GET  format is ?key=value&key=value
* PATH format is /key/value/key/value
*
* Note: PATH format may required modifications to your webserver configuration.
*/
define('URL_FORMAT', 2);

index.phpの変更

下記のプログラムを先頭のほうに追加します。

//PATH INFO対策 PATH_INFOの設定されないサーバでPATH_INFOを設定する。
$path_parts = pathinfo($_SERVER['PHP_SELF']);
if($path_parts['dirname'] != "/"){
	$path_info = str_replace($path_parts['dirname'], "",$_SERVER['REQUEST_URI']);
}else{
	$path_info = $_SERVER['REQUEST_URI'];
}
$_SERVER['PATH_INFO'] = $path_info;

apacheの設定変更

/でパラメータを区切ったURLをapacheに要求した場合、apacheの方では該当のフォルダを探してしまいます。
そこで適切なURLに変換する機能をmod_rewriteを使って実現します。

httpd.confの修正

mod_rewriteを利用できるようにします。xamppでは

LoadModule rewrite_module modules/mod_rewrite.so

が有効になっているかを確認してください。

続いてドキュメントルートに.htaccessを作成しURLの変換ルールを定義します。 例えばバーチャルドメインが設定されている場合、下記のように設定します。 ただし、下記の設定は index.php/act/aaa/mod/bbb/ をindex.phpとして認識するようにします。 action,moduleの場合はそれぞれ適宜変更してください。

<VirtualHost 127.0.0.1>
   DocumentRoot C:/job3/jyuku/workspace/htdocs
   ServerName www.jyuku.net
   <Directory C:/job3/jyuku/workspace/htdocs>
	Options All
	Allowoverride All
       AcceptPathInfo On
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$  [NC]
       RewriteRule ^(.*)/(act/|mod/) $1/index.php
       RewriteRule ^(act/|mod/) index.php
    </Directory>
</VirtualHost>

上記のルールは、http://www.test.com/act/aaaa/mod/bbbb/の場合は http://www.test.com/index.phpとしてアクセスします。 またhttp://www.test.com/admin/act/aaaa/mod/bbbb/の場合は http://www.test.com/admin/index.phpとしてアクセスします。

おまけ

action, module を act, modに変更する方法です。

config.phpの下記の部分を修正します。これらの定数を変更することでaction,moduleを好きな名称に変更することが可能です。

/**
* The parameter name used to specify a module.
*/
define('MODULE_ACCESSOR', 'mod');
/**
* The parameter name used to specify an action.
*/
define('ACTION_ACCESSOR', 'act');

Last-modified: 2006-09-25 (月) 09:07:47 (1444d)