EthnaでURLをきれいにする

October 20, 2009,
tags: ethna php


このエントリーをはてなブックマークに追加

Ethna2.5.0が出たので、遊びはじめたわけですが、デフォルトだとcakePHP見たいにURLがきれいではない。
どうしたものかと思って、ふと思いついた方法がこれです。

app_id_Controller.phpの中に以下のメソッドを記述する。

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のなかにいれる。


    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のなかで

 array(
        	'login' => array( //actionの指定
        		'path' => 'login/test', //書き換えるパス
                	'path_regexp'   => false,
                	'path_ext'      => false,
        	),
        ),

一応書き換えられるっぽいけど、actionごとに設定していくのはなぁ。。。

とか書いておく。

んでもって.htaccessも用意する。


    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の使い方知っている方は教えてください・・・。

comments powered by Disqus