在 Laravel 中重定向域名

Posted

技术标签:

【中文标题】在 Laravel 中重定向域名【英文标题】:Redirect domain name in Laravel 【发布时间】:2016-09-21 13:59:58 【问题描述】:

我想在 Laravel 5 中重定向一个短链接域,例如xyz.com 到 examplesite.com,同时维护 URI 请求。例如:

xyz.com/something?foo=var

将重定向到:

example.com/something?foo=var

我尝试在路由中使用域组,但它似乎不适用于域名级别,只能用于子域。我选择的另一个选项是 MiddleWare 路线。

我已经设置了一个有效的中间件“RedirectsMiddleware”,并且在我的路由文件中有以下内容:

Route::group(['middleware' => ['redirects'] ], function () 
    Route::get('/', 'HoldingSiteController@home');
);

我的 RedirectsMiddleware 如下所示:

...
    public function handle($request, Closure $next)
    
        $protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === true ? 'https://' : 'http://';        
        $host = $_SERVER['SERVER_NAME'];
        $defaulthost = 'example.com';

        if($host != $defaulthost) 

            return Redirect::to($protocol . $defaulthost . $_SERVER['REQUEST_URI']);
        

        return $next($request);
    
...

当仅请求“example.com”或“example.com/?something=something”时,它会很好地重定向。添加到末尾的任何路线,例如“example.com/someroute”总是抛出异常,查询字符串无效。尽管我的 MiddleWare 重定向,它似乎正在寻找那条路线:

NotFoundHttpException in RouteCollection.php line 161:

【问题讨论】:

Any route added to the end throws an exception: 是什么意思? 对不起,我不是特别清楚,我已经编辑了问题以反映我的意思。 【参考方案1】:

您需要使用通配符路由。 url 末尾的 GET 变量不会以您尝试的方式更改路由。访问http://example.com/?var1=A“计数”为访问定义为 Route::get('/', function() ) 的路由,因为您正在使用 GET 变量 var1 访问 example.com/。换句话说,为了确定 HTTP 请求应该选择哪个路由,通常会忽略 GET 变量。

通配符匹配使用正则表达式路由方式->where()

Route::group(['middleware' => ['redirects'] ], function () 
    Route::any('/anything', 'HoldingSiteController@home')
        ->where('anything', '.*');
    Route::any('/', 'HoldingSiteController@home'); 
);

如上所示,对于空请求,您还需要空路由 any('/')。此示例还包括“any”动词而不是“get”动词,以便在其请求匹配中更加贪婪。

Laravel - Using (:any?) wildcard for ALL routes?

https://laravel.com/docs/5.2/routing#parameters-regular-expression-constraints

【讨论】:

以上是关于在 Laravel 中重定向域名的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.8 中的 htaccess 中重定向 [重复]

如何在 laravel jetstream 中重定向?

在 Laravel 5.3 中重定向路由

如何在 Laravel 中重定向后设置选择值

在 laravel 5.3 中重定向回请求的页面

在 Laravel 4 中重定向回时保留表单值