我正在开发一个需要安全连接的项目。
我可以设置路线,uri,资产使用' https'通过:
Route::get('order/details/{id}', ['uses' => 'OrderController@details', 'as' => 'order.details', 'https']);
url($language.'/index', [], true)
asset('css/bootstrap.min.css', true)
但是一直设置参数似乎很累。
有没有办法强制所有路由生成HTTPS链接?
答案 0 :(得分:14)
您可以在'url' => 'https://youDomain.com'
中设置config/app.php
,也可以使用中间件类Laravel 5 - redirect to HTTPS。
答案 1 :(得分:10)
以下是几种方法。选择最方便。
配置您的网络服务器,将所有非安全请求重定向到https。 nginx配置示例:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
使用https:
设置环境变量APP_URL
APP_URL=https://example.com
使用助手secure_url()(Laravel5.6)
将以下字符串添加到AppServiceProvider :: boot()方法(对于版本5.4 +):
\Illuminate\Support\Facades\URL::forceScheme('https');
更新
为路由组隐式设置方案(Laravel5.6):
Route::group(['scheme' => 'https'], function () {
// Route::get(...)->name(...);
});
答案 2 :(得分:8)
“ 2020更新?Url :: forceScheme对我来说算是时髦,但这像毛钱一样有效。”
https
代码段。
resolve(\ Illuminate \ Routing \ UrlGenerator :: class)-> forceScheme('https');
app/providers/RouteServiceProvider.php
。 /**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
resolve(\Illuminate\Routing\UrlGenerator::class)->forceScheme('https');
parent::boot();
}
php artisan route:clear && composer dumpautoload
来清除Laravel的缓存路由和缓存服务提供商。答案 3 :(得分:7)
将其放置在boot()方法中的AppServiceProvider中
if($this->app->environment('production')) {
\URL::forceScheme('https');
}
答案 4 :(得分:5)
将此添加到.htaccess代码
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]
将www.yourdomain.com替换为您的域名。这将强制您域中的所有网址都使用https。确保在您的域上安装并配置了https证书。如果您没有看到绿色的https为安全,请在chrome上按f12并修复控制台选项卡中的所有混合错误。
希望这有帮助!
答案 5 :(得分:4)
我希望使用forceScheme
而不是在Web服务器上进行操作。因此Laravel应用应该对此负责。
正确的方法是在boot
的{{1}}函数内添加if语句
app/Providers/AppServiceProvider.php
提示:证明您已正确配置APP_ENV。转到您的Linux服务器,输入 if (env('APP_ENV') === 'production') {
\Illuminate\Support\Facades\URL::forceScheme('https');
}
这已在Laravel 5(特别是5.6)上进行了测试。
答案 6 :(得分:3)
我在web.php
或api.php
文件的末尾使用了它,并且效果很好:
URL::forceScheme('https');
答案 7 :(得分:3)
public function boot()
{
if(config('app.debug')!=true) {
\URL::forceScheme('https');
}
}
在app / Providers / AppServiceProvider.php
中答案 8 :(得分:1)
.htaccess文件中使用以下代码会自动将访问者重定向到您网站的HTTPS版本:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
答案 9 :(得分:1)
答案 10 :(得分:0)
我想出了如何在负载平衡的基础架构中做到这一点。
您需要在 Nginx 配置中添加:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
add_header X-Forwarded-Proto https;
add_header X-Forwarded-Port 443;
add_header Ssl-Offloaded "1";
add_header Access-Control-Allow-Origin "*";
fastcgi_param HTTPS "on";
fastcgi_param HTTP_X_FORWARDED_PROTO "https";
}
导入器部分是 add_headers 和 pastcgi_params,它通过 AWS 负载均衡器发挥作用。
答案 11 :(得分:0)
解决这个问题的更好方法是: -> 转到公共文件夹, -> 编辑 .htaccess 只需在下面添加此代码:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
-> 并保存。 -> 关闭并重新打开浏览器。
答案 12 :(得分:0)
对于 Laravel 8,如果您尝试了上述所有方法,但浏览器重定向您的次数过多,请在 TrustProxies
中间件中设置代理,如下所示:
App\Http\Middleware\TrustProxies.php
/**
* The trusted proxies for this application.
*
* @var array|string|null
*/
protected $proxies = '*';
答案 13 :(得分:-1)
尝试一下-它会起作用 在RouteServiceProvider文件中
$url = \Request::url();
$check = strstr($url,"http://");
if($check)
{
$newUrl = str_replace("http","https",$url);
header("Location:".$newUrl);
}