【问题标题】:Laravel redirect all http to httpsLaravel 将所有 http 重定向到 https
【发布时间】:2019-06-18 02:21:14
【问题描述】:

我在 Laravel 有一个网站,不久前我切换到了 https。在其他帖子的帮助下,我已成功将所有安全的非 www (https://) URL 重定向到 www (https://www.) 变体,但在获取两个非安全变体 (http://) 时遇到了困难和 (http://www.) 重定向到安全的 www 变体 (https://www.)

当您调用非安全的 www 版本时: http://www.apk-vervaldatum.nl,

它重定向到: https://www.apk-vervaldatum.nl/public/https://www.apk-vervaldatum.nl

当您调用非安全、非 www 版本时: http://apk-vervaldatum.nl,

它首先重定向到: https://www.apk-vervaldatum.nl

然后重定向到: https://www.apk-vervaldatum.nl/public/https://www.apk-vervaldatum.nl

我在根文件夹中的 htaccess 看起来是:

*Options +FollowSymLinks 
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ public/$1 [L]*

我在公用文件夹中的 htacces 看起来是:

*Options -MultiViews -Indexes 
RewriteEngine On # 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]*

【问题讨论】:

  • 您是否研究过在 nginxapache 配置文件而不是 .htaccess 中解决此问题?
  • 嗨,尼古拉,我还没有。因为我不是那个领域的专家。我相信它应该首先通过 htaccess 文件修复。如果无法实现,我会考虑其他选择。

标签: laravel .htaccess redirect https


【解决方案1】:

这里有如何使用 HTTPS 强制执行的方法

转到AppServiceProvider

namespace App\Providers;

use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        URL::forceScheme('https'); // add this
    }
}

另一种方法是更改​​.htaccess:

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

祝你好运!

【讨论】:

  • 我尝试了 .htaccess,但这对我不起作用。
  • 你用 AppServiceProvider 试过了吗?
【解决方案2】:

你的 .htaccess 应该是:

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

    RewriteEngine On

    # Start with www 
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]


    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


    # 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}]

</IfModule>

【讨论】:

  • 当我使用它时,不安全的现在 www 版本被重定向到:apk-vervaldatum.nl/public/index.php 也许我应该在使用它时更改根 htaccess?现在是:Options +FollowSymLinks RewriteCond %{HTTPS} !on RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ public/$1 [L]
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2018-02-02
  • 2015-12-27
  • 1970-01-01
  • 2016-05-13
  • 2014-04-27
  • 2017-05-09
  • 2014-06-30
相关资源
最近更新 更多