+3

Bỏ index.php trên URL để tối ưu cho SEO

Khi sử dụng framwork Laravel hẳn các bạn không còn lạ gì với đường dẫn index.php trên URL mặc định trên Laravel nữa, việc này không ảnh hưởng gì đến logic cả nhưng ảnh hưởng đến SEO website của bạn. Một ví dụ điển hình là trang chủ của Laravel:

Sau đây mình sẽ hướng dẫn các bạn bỏ qua index.php bằng cách sửa file app\Providers\RouteServiceProvider.php như sau


namespace App\Providers;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
use Str;

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';

    /**
     * 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->removeIndexPhpFromUrl();

        $this->mapApiRoutes();

        $this->mapWebRoutes();

        //
    }

    /**
     * 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'));
    }

    /**
     * This will remove the index.php from the URL and prevent canonical conflicts.
     *
     * @return void
     */
    protected function removeIndexPhpFromUrl()
    {
        if (Str::startsWith(request()->getRequestUri(), '/index.php')) {
            $url = str_replace('/index.php', '', request()->getRequestUri());
            $url = request()->getSchemeAndHttpHost() . Str::start($url, '/');

            if (strlen($url) > 0) {
                header("Location: $url", true, 301);
                exit;
            }
        }
    }
}

Chúc các bạn thành công. Happy coding and peace out ✌️


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí