ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

現在位置のURL

例えばログイン認証をかけたページに対して、ログインしてないユーザーがアクセスしたとき、ログインページを表示します。で、ログインに成功したら、もともとユーザーがアクセスしてきたページにリダイレクトさせると思うのです。
そういったときにいわゆる「戻り先URL」というのが必要になってくるのですが、FWに依らずこれを生成するコード、というのがあんま見かけないです。

試しにこんな感じで作ってみました。

function current_url()
{
    $_url = $_SERVER['REQUEST_URI'];
    $_http_host = $_SERVER['HTTP_HOST'];
    if (empty($_http_host)) {
        $_http_host = $_SERVER['SERVER_NAME'];
    }
    $_server_port = $_SERVER['SERVER_PORT'];
    $_schema = 'http';
    if ($_server_port == 443) {
        $_schema .= 's';
    }
    $_port = '';
    if ($_server_port != 80 && $_server_port != 443) {
        $_port = ':' . $_server_port;
    }

    return $_schema . '://' . $_http_host . $_port . $_url;
}

で、結構この「戻り先URL」として現在位置のURLを算出して渡す、という挙動は多いと思うのですが、なんか、FWとして実装してるのってあるんですかね?最近のはmod_rewrite併用が多いため、遷移先のURLを生成する、というのは多いようなんですが、逆に現在位置のURLを取得するって処理、どうなんでしょうかね・・・。
ちなみに、こないだちょっとsymfonyを使ったんですが、その時は自前でこんな「戻り先URL」取得関数を作って使ってました。どうやって調べだしたのか、完全に忘却の彼方。

public static function current_url($is_absolute = true)
{
    $current_uri = sfRouting::getInstance()->getCurrentInternalUri();
    return sfContext::getInstance()->getController()->genUrl($current_uri, $is_absolute);
}