Ethna2.5.0が出たので、遊びはじめたわけですが、デフォルトだとcakePHP見たいにURLがきれいではない。
どうしたものかと思って、ふと思いついた方法がこれです。
app_id_Controller.phpの中に以下のメソッドを記述する。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function _getActionName_Form() {
if (array_key_exists('url',$_REQUEST) == false) {
return null;
}
return $_REQUEST['url'];
}
function getActionRequest($action,$type="hidden")
{
$s = null;
if ($type == "hidden") {
$s = sprintf('<input type="hidden" name="url" value="%s" />',htmlspecialchars($action, ENT_QUOTES));
}
else if ($type == "url") {
$s = sprintf('url=%s',urlencode($action));
}
return $s;
}
|
でもって.htaccessを作って、wwwのなかにいれる。
1
2
3
4
5
6
|
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
|
見てのとおり、cakeの.htaccess持ってきただけです。。。
これでも一応はURLがきれいになります。
とおもったら、階層が深くなるとだめなんだね。。http://xxxx.xxx.jp/login/doとか書くとえらーになった。。。
http://xxxx.xxx.jp/login_doだったら大丈夫だけど、かっこよくない。
しかたないので、UrlHandlerをつかう!!
※さっきコントローラで書いたfunctionを全部コメントアウトか、消すかしてください。
appid_UrlHandler.phpのなかで
1
2
3
4
5
6
7
|
array(
'login' => array( //actionの指定
'path' => 'login/test', //書き換えるパス
'path_regexp' => false,
'path_ext' => false,
),
),
|
一応書き換えられるっぽいけど、actionごとに設定していくのはなぁ。。。
とか書いておく。
んでもって.htaccessも用意する。
1
2
3
4
5
6
|
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php/$1
</IfModule>
|
これで一応は、http//xxx.xxx.jp/index.php?action_login=trueとか書かなくてもhttp//xxx.xxx.jp/loginって感じのURLになる。
なんか_を/に変えてくれる方法探さなきゃ。。
ちゃんとしたUrlHandlerの使い方知っている方は教えてください・・・。