【问题标题】:How to redirect site URLs to https://example.com [duplicate]如何将站点 URL 重定向到 https://example.com [重复]
【发布时间】:2021-06-19 02:17:08
【问题描述】:

如何重定向:

  • https://www.example.com
  • http://www.example.com
  • http://example.com

到:

  • https://example.com

如何使用.htaccess 文件执行此操作?

【问题讨论】:

标签: apache


【解决方案1】:

您可以通过将此代码添加到 .htacces 文件来做到这一点

RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

请注意是否要从 url 中删除 www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

【讨论】:

  • 感谢您的回答。你确定代码支持我说的所有位置吗??
  • 我已经在不止项目上使用它并且工作完美
  • 请查看我在您的回答中的编辑,如果正确请批准
  • 那我该怎么做呢??
  • 我已经更新了答案你可以试试
【解决方案2】:

使用下面的命令php artisan make:middleware RedirectToNonWwwMiddleware定义一个用于从url中删除www的中间件,并在该中间件的handle方法中编写下面的代码

public function handle($request, Closure $next)
    {
        if (substr($request->header('host'), 0, 4) == 'www.') {
            $request->headers->set('host', config('app.url'));
            $trailing = $request->path() == '/' ? '' : '/';
            return \Redirect::to(config('app.url') . $trailing . $request->path());
        }
        return $next($request);
    }

将中间件添加到app\Http\Kernel.php 文件中的$middleware 数组中,如下所示

protected $middleware = [

    // Other middlewares ...

    \App\Http\Middleware\RedirectToNonWwwMiddleware::class,
];

使用 https 在您的 .env 文件中定义 url,如下所示

APP_URL=https://example.com

最后通过运行php artisan config:clear清除配置缓存。

【讨论】:

  • 谢谢,但我想通过 .htaccess 文件来完成
  • 不客气。您也可以为此使用 spatie 的包laravel-missing-page-redirector
  • 谢谢,但对我没用
【解决方案3】:

我找到了问题的最佳答案:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

它支持我所说的所有立场。

您可以在以下位置进行测试: Test .htaccess

所以你可以重定向:

  • https://www.example.com
  • http://www.example.com
  • http://example.com

到:

  • https://example.com

使用该代码。

【讨论】:

  • 这将创建一个“重定向循环”,因为第二条规则会重定向到自身。 (MWL htaccess 测试器无法捕捉到这一点。)@menasoft 已经发布了一个可接受的解决方案,您似乎只是复制了它并颠倒了这两个规则 - 这没有任何区别。 (?)
  • 这是最好的解决方案。我测试过了。
  • 你是如何“测试”它的?您发布的指令显然是错误的——它们不可能按书面规定工作。正如我在评论中指出的那样,您发布的指令将导致无休止的重定向循环(如果它们被执行),因为第二条规则将规范主机名(即example.com - 无 www)重定向到自身。但是,如果 HTTP 和 HTTPS 解析到不同的主机,并且这些指令位于 HTTP 主机上,则不会出现“循环”,但是对 HTTPS 上的非规范主机名的请求将不会被规范化。 (?!)
  • 即使使用您引用的 MWL .htaccess 测试器,您仍然可以推断出错误...当您请求 https://example.com/foo 时,您可以看到它会生成一个“重定向循环”,因为“输出URL”与“输入 URL”相同......htaccess.madewithlove.be?share=4c6d6cd0-fb9d-4d18-9f86-c3484e8f… / 当您请求 https://example.com/foo(即规范方案 + 主机名)时,应该有“no”输出 - 它不应该做任何事情。跨度>
  • ??我再次测试它工作完美。当你把 https:// 例子。 com 的输出是 https:// 示例。 com 也因此完美运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2011-08-12
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
相关资源
最近更新 更多