Имя пользователя как субдомен на laravel

Я создал поддомен подстановки * .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. Любые идеи по достижению этого?

Solutions Collecting From Web of "Имя пользователя как субдомен на laravel"

Это легко. Во-первых – НЕ меняйте файл .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 // ie user.domain.com // Check if user is valid and has access - ie 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 // ie domain.com // Do nothing here - will just route normally - but you could put logic here if you want } }); 

edit: если у вас есть расширение страны (например, domain.com.au или domain.com.eu), тогда вы захотите изменить счетчик ($ server), чтобы проверить на 4, а не на 3

Laravel 4 имеет эту функциональность из коробки:

 Route::group(array('domain' => '{account}.myapp.com'), function() { Route::get('user/{id}', function($account, $id) { // ... }); }); 

Источник

Хотя я не могу сказать, какое полное решение будет в вашем случае, я бы начал с значения SERVER_NAME из запроса (PHP: $ _SERVER ['SERVER_NAME']), например:

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

Удостоверьтесь, что вы дополнительно очистите / дезинфицируете имя пользователя, и оттуда вы можете найти пользователя из имени пользователя. Что-то вроде:

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

Где-то в файле маршрутов вы можете условно определить маршрут, если SERVER_NAME не является http://www.domain.com или domain.com, хотя я уверен, что другие могут придумать гораздо более красноречивый способ для этой части …

способность добавлять субдомены, такие как субдомен *. domain.com должен быть включен вашим хостинг-провайдером, в .htaccess вы не можете настроить поддержку поддоменов