在laravel項目開發的過程中,為了能更好的展現PC端和移動端不同內容之間的差異,我們通常會使用www.test.com訪問PC端的內容,而m.test.com去訪問移動端的內容,這種架構的設計方式,能更好的符合搜索引擎的規則,特別是針對百度移動適配規則能有更好的表現。
百度移動適配規則如下:
1. 為提升搜索用戶在百度移動搜索的檢索體驗,會給對應PC頁面的手機頁面在搜索結果處有更多的展現機會,需要站點向百度提交主體內容相同的PC頁面與移動頁面的對應關系,即為移動適配。為此,百度移動搜索提供“移動適配”服務,如果您同時擁有PC站和手機站,且二者能夠在內容上對應,即主體內容完全相同,您可以通過移動適配工具進行對應關系提交。
2. 自適應站點不需要使用移動適配工具。
通過規則適配,使用正則表達式描述PC-移動URL關系,適用于網站大多數目錄頁
那么在Laravel中如何去實現,詳情如下:
1、在app\http\Controllers文件夾里面創建PC端和移動端不同的控制器文件夾,分別對應PC端的路由文件及移動端路由文件
2、修改app\http\providers\RouteServiceProvider.php文件
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
protected $homeNamespace = 'App\Http\Controllers\Web';//PC端
protected $mNamespace = 'App\Http\Controllers\M';//移動端
/**
* The path to the "home" route for your application.
*
* @var string
*/
public const HOME = '/home';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
//
parent::boot();
}
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
// $this->mapApiRoutes();
// $this->mapWebRoutes();
// 通過判斷$_SERVER['HTTP_HOST']的入口來區分www和m
$sld_prefix = explode('.',$_SERVER['HTTP_HOST'])[0];
if('www' == $sld_prefix){
$this->mapHomeRoutes();
}elseif('m' == $sld_prefix){
$this->mapMRoutes();
}
}
/**
* PC端指定路由文件
*/
protected function mapHomeRoutes()
{
Route::middleware('web')
->namespace($this->homeNamespace)
->group(base_path('routes/www.php'));
}
/**
* 移動端指定路由文件
*/
protected function mapMRoutes()
{
Route::middleware('web')
->namespace($this->mNamespace)
->group(base_path('routes/m.php'));
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
}
3、在routes目錄下創建www.php路由
Route::get('/', 'IndexController@index'); //PC端網站首頁
4、在routes目錄下創建m.php路由
Route::get('/', 'IndexController@index'); //移動首頁
5、測試效果
現在我們已經實現不同域名之間的訪問效果。