如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?

Posted

技术标签:

【中文标题】如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?【英文标题】:How to redirect one route to HTTPS and all the others to HTTP in Laravel 4? 【发布时间】:2015-06-16 08:17:03 【问题描述】:

我想将我网站上的结帐页面提供为“HTTPS”,但我网站上的所有其他页面都需要保持“HTTP”。我的 SSL 证书已正确安装,并且 SSL 路由在我的服务器上运行良好。

我在 filters.php 中添加了 2 个函数:一个函数强制使用 ssl (force.ssl),一个函数 (no.ssl) 将页面作为 http。

Route::filter('force.ssl', function()

if( ! Request::secure() && App::environment() !== 'local')

return Redirect::secure(Request::getRequestUri());

);

Route::filter('no.ssl', function()

if( Request::secure())

return Redirect::to(Request::path(), 302, array(), false);

);

我在 routes.php 中添加了以下路由。

Route::when('checkout/getpaymentpage/*', 'force.ssl');
Route::when('/*', 'no.ssl');

结帐页面被重定向到 HTTPS 页面,但是,如果用户随后决定通过单击导航栏中的链接导航到我网站上的另一个页面,则下一页也将作为 HTTPS 页面提供而不是作为 HTTP 页面。即使我明确添加了一条将所有其他页面显示为非 HTTP (no.ssl) 的路由。

我不确定我在这里做错了什么?如何确保只有我的结帐页面以 HTTPS 形式提供?

【问题讨论】:

【参考方案1】:

你为什么不让你的整个网站使用 HTTPS?

您将从 Google 获得免费的 SEO 提升:http://googlewebmastercentral.blogspot.com.au/2014/08/https-as-ranking-signal.html

而现实情况是它不会对服务器开销产生真正的改变。

否则你做很多工作去反对当前的趋势,使整个网络 https...

【讨论】:

感谢分享!将整个站点重定向到 HTTPS 的最佳方法是什么?您是否建议我使用过滤器/路由或在我的 .htaccess 文件中执行此操作? 您应该在 .htaccess 文件中执行此操作。那么你不需要担心 Laravel 项目中的任何 httpshttp 代码 - 你可以放心地假设它是 all HTTPS 已修复!现在每个页面都通过 HTTPS 提供服务 :-) 让我的整个站点 HTTPS 确实更有意义。只是另一个问题。您知道为什么有些页面在 safari 中显示“https 图标/挂锁”,而其他页面不显示此图标/挂锁吗?尽管现在所有页面都是 Https。

以上是关于如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?的主要内容,如果未能解决你的问题,请参考以下文章

laravel 4重定向到带有2个参数的路由

Laravel 8 Jetstream如何在重置密码后将用户重定向到自定义路由

如何使用获取参数将 laravel (5.3) 路由重定向到其他路由

如何从刀片模板中的 Javascript 文件重定向 Laravel 路由

如何在 Laravel 中将验证错误传递给查看而不重定向

如何使 Laravel 5 重定向到没有哈希(#)的 Angular 路由?