【问题标题】:Redirect all urls to HTTPS except one which starts with "/api"将所有 URL 重定向到 HTTPS,但以“/api”开头的 URL 除外
【发布时间】:2018-07-25 19:19:21
【问题描述】:

除了对 api 的请求外,如何将所有请求从 http 重定向到 https? api 的 URL 以 /api 开头。 我使用了这个配置,但似乎不起作用。

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

你能告诉我哪里做错了吗?项目是用 Laravel 编写的。

提前致谢

【问题讨论】:

  • 例如可以用RewriteRule ^(api) - [L]开始规则
  • 我可以建议你不要这样做吗?你不应该有这个问题,你应该升级所有请求。也许重新考虑你是如何开发这个的?
  • @ian 所以桌面开发团队开发了通过 http 请求的应用程序。现在客户想要将网页版从 http 重定向到 https。而且我不能只将手动重定向设置为 https,因为旧客户端(旧桌面应用程序版本)会崩溃。
  • 我会说回到他们并要求他们支持 https 而不是你做出奇怪的改变。总之,祝你好运

标签: laravel apache apache2


【解决方案1】:

如果你需要这个,你可以创建一个名为 checkHttps 的中间件并粘贴以下代码

<?php

namespace App\Http\Middleware;

use Closure;

class checkHttps {

    public function handle($request, Closure $next) {

        if(!request()->is('api/*')) {
            if (!$request->secure()) {
                return redirect()->secure($request->getRequestUri());
            }
        }

        return $next($request);
    }

}

然后将中间件添加到内核

 protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\checkHttps::class,
    ],
];

希望这能解决您的问题。

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 2017-02-24
    • 2014-03-30
    • 1970-01-01
    • 2017-01-14
    • 2019-07-13
    • 2015-08-09
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多