9

ワイルドカード サブドメイン *.domain.com を設定しました & 次の .htaccess を使用しています:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !www\.
RewriteCond %{HTTP_HOST} (.*)\.domain\.com
RewriteRule .* index.php?username=%1 [L]

すべてが完璧に機能します。

このメソッドをlaravelで実装したいと考えています。主に、username.domain.com にアクセスしたときにユーザーのプロファイルを表示したいと考えています。これを達成するためのアイデアはありますか?

4

4 に答える 4

23

かんたんだよ。.htaccessまず、Laravel が提供するデフォルトからファイルを変更しないでください。デフォルトでは、ドメインへのすべてのリクエストindex.phpはファイルにルーティングされますが、これはまさに私たちが望んでいるものです.

次に、routes.phpファイルで「before」フィルターを使用します。これにより、他の処理が行われる前に、アプリケーションへのすべての要求がフィルター処理されます。

Route::filter('before', function()
{
    // Check if we asked for a user
    $server = explode('.', Request::server('HTTP_HOST'));

    if (count($server) == 3) 
    {
        // We have 3 parts of the domain - therefore a subdomain was requested
        // i.e.  user.domain.com

        // Check if user is valid and has access - i.e. is logged in
        if (Auth::user()->username === $server[0])
        {
            // User is logged in, and has access to this subdomain

            // DO WHATEVER YOU WANT HERE WITH THE USER PROFILE
            echo "your username is ".$server[0];
        }
        else
        {
            // Username is invalid, or user does not have access to this subdomain
            // SHOW ERROR OR WHATEVER YOU WANT
            echo "error - you do not have access to here";
        }

    }
    else
    {
        // Only 2 parts of domain was requested - therefore no subdomain was requested
        // i.e. domain.com

        // Do nothing here - will just route normally - but you could put logic here if you want
    }
});

編集: 国の拡張子 (つまり、domain.com.au または domain.com.eu) がある場合は、count($server) を変更して、3 ではなく 4 を確認する必要があります。

于 2013-01-22T13:57:44.650 に答える
13

Laravel 4 には、すぐに使用できる次の機能があります。

Route::group(array('domain' => '{account}.myapp.com'), function() {

    Route::get('user/{id}', function($account, $id) {
        // ...
    });

});

ソース

于 2013-02-23T16:32:49.037 に答える
2

あなたのケースで完全な解決策が何であるかは言えませんが、次のようなリクエスト (PHP: $_SERVER['SERVER_NAME']) の SERVER_NAME 値から始めます。

$username = str_replace('.domain.com', '', Request::server('SERVER_NAME'));

ユーザー名をさらにクリーン/サニタイズしてください。そこから、ユーザー名からユーザーを検索できます。何かのようなもの:

$user = User::where('username', '=', $username)->first();

SERVER_NAMEがwww.domain.comまたはdomain.comでない場合、ルートファイルのどこかで条件付きでルートを定義できますが、他の人がこの部分についてもっと雄弁な方法を思い付くことができると確信しています...

于 2013-01-21T16:44:31.493 に答える
0

サブドメイン*のようなサブドメインを追加する機能。domain.comは、ホスティングプロバイダーによって切り替える必要があります。.htaccessでは、サブドメインのサポートを構成できません。

于 2013-01-22T07:51:46.450 に答える