Laravel 基础 url 显示非 SSL url()
Posted
技术标签:
【中文标题】Laravel 基础 url 显示非 SSL url()【英文标题】:Laravel base url display non SSL url() 【发布时间】:2021-01-25 03:58:25 【问题描述】:我通过 .htaccess 启用强制 SSL。它工作正常并重定向到https://www.myappurl.com。在我的应用程序中,我使用 Ajax 来检索类别列表。启用 SSL 的类别列表未加载后。它显示时没有 SSL URL http://www.myappurl.com。我还在 .env 文件中将 APP_URL 更改为 https://www.myappurl.com
我的 .htaccaccess 代码
RewriteEngine On
# ensure www.
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule ^ https://www.%HTTP_HOST%REQUEST_URI [L,R=301]
# ensure https
RewriteCond %HTTP:X-Forwarded-Proto !https
RewriteCond %HTTPS off
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]
Ajax 代码
$.ajax(
url: 'url('getsateslist')',
type: "POST",
dataType: "json",
【问题讨论】:
无需更改env
或.htaccess
,改用secure_url()
助手
【参考方案1】:
看到您使用X-Forwarded-Proto
来确定协议,那么我假设您的站点位于终止 SSL 请求的代理之后,并且代理本身使用 HTTP 连接到您的站点,那么您需要 enable the "trusted proxies" middleware
你可以找到basic implementation on github(它确实随 Laravel 样板提供),但你也可以实现自己的。
例如,如果您使用 AWS 负载均衡器,您可以这样做:
<?php
namespace App\Http\Middleware;
use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
这使用了包TrustedProxy,这是一个 Laravel 依赖项,因此可以在那里找到更多信息。
【讨论】:
【参考方案2】:secure_url()
帮助函数生成一个完全限定的 HTTPS URL 到给定路径,更改:
url: ' url('getsateslist') ',
到
url: ' secure_url('getsateslist') ',
见[secure_url()
]here的官方文档
【讨论】:
以上是关于Laravel 基础 url 显示非 SSL url()的主要内容,如果未能解决你的问题,请参考以下文章
Guzzle - Laravel。如何使用 x-www-form-url-encoded 发出请求