在laravel 5.2中将HTTP重定向到https

Jua*_*pez 4 .htaccess ssl https redirect laravel

我有一个Laravel 5.2项目。最近,我在网站上安装了SSL证书,因此,当我https://example.com在浏览器中键入内容时,它可以工作,但是在编写时example.com,它通过HTTP连接。

为了解决这个问题,我在.htaccess文件中添加了以下几行:

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)

之后,当我键入内容时example.com,浏览器会将我重定向到https://example.com。那很完美。

问题是当我尝试访问URL时http://example.com/download/get/book/volume2,它没有将我重定向到HTTPS。它将我重定向到索引页面。如果在URL中添加sof https,它可以正常工作,但是我需要该应用将我从HTTP重定向到HTTPS。

路由文件中的路由:

Route::get('download/get/book/{book}'
Run Code Online (Sandbox Code Playgroud)

该路线将打开我privates/storage在浏览器选项卡中的文件夹中的PDF文件。

编辑:

我的.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]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# require SSL 
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)

MrW*_*ite 5

您的HTTP到HTTPS重定向需要.htaccessRewriteEngine指令之后,尤其是在Laravel Front Controller 之前,紧靠文件顶部。

通常,外部重定向应该始终在内部重写之前进行。

前端控制器捕获所有请求(或者更确切地说,未映射到物理文件或目录的请求)并将其重写index.php(最终处理路由)。问题是您的HTTP到HTTPS重定向会在以后发生,并将现在重写的URL转换为到的外部重定向index.php

同样,您的# Handle Authorization Header块也应该放在前端控制器之前(理想情况下)。(.htaccess由于文件的循环性质,它将在每个目录文件的当前状态下工作.htaccess,但是如果将这些指令移动到服务器配置,它将失败。)


NIK*_*ATH 5

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Run Code Online (Sandbox Code Playgroud)

RewriteEngine On在您的.htaccess文件中添加上面两行。它会自动将发往 http: 的任何流量重定向到 https:

最后,您的 .htaccess 文件将如下所示

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

    RewriteEngine On

    # Redirect to https
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

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

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)