Laravel 将 Http 重定向到 Https

Posted

技术标签:

【中文标题】Laravel 将 Http 重定向到 Https【英文标题】:Laravel Redirect Http to Https 【发布时间】:2017-01-08 00:40:11 【问题描述】:

我们使用 Laravel 5。为了将 http 连接重定向到 https,请使用中间件 HttpsProtocol。

namespace MyApp\Http\Middleware;

use Closure;

class HttpsProtocol 

    public function handle($request, Closure $next)
    
            if (!$request->secure() && env('APP_ENV') === 'prod') 
                return redirect()->secure($request->getRequestUri());
            

            return $next($request); 
    

在我们的 4 个测试用例中,只有 1 个正确工作(最后一个重定向)。其他 3 案例中间件添加 url 额外 index.php

http://www.aqualink.az/index.php ---> https://www.aqualink.az/index.php/index.php http://aqualink.az/index.php ---> https://aqualink.az/index.php/index.php https://www.aqualink.az/index.php ---> https://www.aqualink.az/index.php/index.php https://aqualink.az/index.php ---> https://aqualink.az/index.php

【问题讨论】:

试试这个Laravel 5 - redirect to HTTPS 我们使用相同的方法 Mr Purushotam Thakur 【参考方案1】:

我用 htaccess 解决了

RewriteCond %HTTP_HOST ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %HTTPS !on
RewriteRule (.*) https://%HTTP_HOST%REQUEST_URI [R=301,L]

【讨论】:

【参考方案2】:

我认为最好使用 Web 服务器将所有 HTTP 请求重定向到 HTTPS。 Apache 的示例 VH 配置:

<VirtualHost test.app:80>
   ServerName test.app
   Redirect permanent / https://test.app
</VirtualHost>

<VirtualHost test.app:443>
    ....
</VirtualHost>

【讨论】:

它还阐明了您对端口 80 (http) 和端口 443 (https) 有两个规则。【参考方案3】:

更改虚拟主机后,您可以在公用文件夹上使用该.htaccess

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]

# Force SSL
RewriteCond %HTTPS !=on
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]

【讨论】:

以上是关于Laravel 将 Http 重定向到 Https的主要内容,如果未能解决你的问题,请参考以下文章

Apache 2.4 将本地虚拟主机重定向到 https 而不是 http

没有 index.php 的 AWS ELB 将 HTTP 重定向到 HTTPS

重定向到 laravel 中的路由结果“HTTP 500 错误”

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

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

Laravel 8重定向到特定页面问题