|
通常PHPなどのCGIを使ったWEBシステムではURLにGETパラメータを指定する場合 http://www.test.net/indexphp?action=aaaa&module=bbbb のように指定しますが、このようなURLの形式はGoogleなどの検索エンジンには好まれないようです。 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の方では該当のフォルダを探してしまいます。 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');
|