Laravel 5 - HTTPS'ye yönlendirme


127

İlk Laravel 5 projem üzerinde çalışıyorum ve uygulamamda HTTPS'yi zorlamak için mantığı nereye veya nasıl yerleştireceğimi bilmiyorum. Buradaki önemli nokta, uygulamaya işaret eden birçok alan adının olması ve üçten yalnızca ikisinin SSL kullanmasıdır (üçüncüsü bir geri dönüş alanıdır, uzun hikaye). Bu yüzden bunu .htaccess yerine uygulamamın mantığında ele almak istiyorum.

Laravel 4.2'de yeniden yönlendirmeyi şurada bulunan bu kodla gerçekleştirdim filters.php:

App::before(function($request)
{
    if( ! Request::secure())
    {
        return Redirect::secure(Request::path());
    }
});

Middleware'in böyle bir şeyin uygulanması gerektiğini düşünüyorum, ancak bunu kullanarak tam olarak anlayamıyorum.

Teşekkürler!

GÜNCELLEME

Cloudflare'yi benim gibi kullanıyorsanız, bu, kontrol panelinize yeni bir Sayfa Kuralı ekleyerek gerçekleştirilir.


Peki 3. alanla ne olur? Tüm rotalarda https'yi zorlarsanız, 3. alan çalışmaya devam edecek mi?
Laurence

Bunu tespit etmek$_SERVER['HTTP_HOST']
NightMICU

Ne kadar etkili olması cloudflare sayfa kural için sürdü
CodeGuru

Oh, DNS ayarında proxy'yi açmak zorunda kaldım haha!
CodeGuru

Yanıtlar:


253

Bir Middleware sınıfı ile çalışmasını sağlayabilirsiniz. Sana bir fikir vereyim.

namespace MyApp\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;

class HttpsProtocol {

    public function handle($request, Closure $next)
    {
            if (!$request->secure() && App::environment() === 'production') {
                return redirect()->secure($request->getRequestUri());
            }

            return $next($request); 
    }
}

Ardından, bu ara yazılımı her isteğe uygulayarak kuralı Kernel.phpdosyaya ayarlayarak uygulayın , örneğin:

protected $middleware = [
    'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
    'Illuminate\Cookie\Middleware\EncryptCookies',
    'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
    'Illuminate\Session\Middleware\StartSession',
    'Illuminate\View\Middleware\ShareErrorsFromSession',

    // appending custom middleware 
    'MyApp\Http\Middleware\HttpsProtocol'       

];

Yukarıdaki örnekte, ara yazılım, aşağıdaki durumlarda her isteği https'ye yönlendirecektir:

  1. Mevcut istek, güvenli protokol (http) olmadan geliyor
  2. Çevreniz eşitse production. Bu nedenle, ayarları tercihlerinize göre ayarlayın.

Cloudflare

Bu kodu bir WildCard SSL ile üretim ortamında kullanıyorum ve kod doğru çalışıyor. Bunu && App::environment() === 'production'localhost'ta kaldırıp test edersem , yeniden yönlendirme de çalışır. Yani, yüklü bir SSL'ye sahip olmak veya olmamak sorun değildir. Https protokolüne yönlendirilmek için Cloudflare katmanınıza çok dikkat etmeniz gerekiyor gibi görünüyor.

Düzenle 23/03/2015

@Adam LinkÖnerisi sayesinde : muhtemelen Cloudflare'nin geçtiği başlıklardan kaynaklanıyor. CloudFlare büyük olasılıkla sunucunuza HTTP yoluyla ulaşır ve bir HTTPS isteği ilettiğini bildiren bir X-Forwarded-Proto üstbilgisi geçirir. Middleware'inize şunu söyleyen başka bir satır eklemeniz gerekiyor ...

$request->setTrustedProxies( [ $request->getClientIp() ] ); 

... CloudFlare'nin gönderdiği başlıklara güvenmek için. Bu, yönlendirme döngüsünü durduracak

Düzenle 27/09/2016 - Laravel v5.3

Ara yazılım sınıfını şu webgruba eklemeniz yeterlidir kernel.php file:

protected $middlewareGroups = [
    'web' => [
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,

        // here
        \MyApp\Http\Middleware\HttpsProtocol::class

    ],
];

Unutmayın webayarlamak gerek kalmaz grup, varsayılan olarak her rota uygulanan webyolları ne de kontrolörleri açıkça.

Düzenleme 23/08/2018 - Laravel v5.7

  • Kullanabileceğiniz ortama bağlı olarak bir isteği yeniden yönlendirmek için App::environment() === 'production'. Önceki sürüm için idi env('APP_ENV') === 'production'.
  • Kullanmak \URL::forceScheme('https');aslında yeniden yönlendirmez. Yalnızca https://web sitesi oluşturulduktan sonra bağlantılar oluşturur.

5
Bu bana bir yönlendirme döngüsü veriyor gibi görünüyor ... yine de çalışması gerekiyor gibi görünüyor. Herhangi bir fark yaratır mı bilmiyorum ama bir Cloudflare SSL kullanıyoruz. Ancak bunun basit yönlendirmeyi değiştireceğini sanmıyorum.
NightMICU

3
@NightMICU Yönlendirme ile sorunu çözüp çözmediğinizden emin değilim, ancak büyük olasılıkla Cloudflare'nin geçtiği başlıklardan kaynaklanıyor. CloudFlare, muhtemelen sunucunuza HTTP yoluyla ulaşır ve bir HTTPS isteğini ilettiğini bildiren bir X-Forwarded-Proto başlığı iletir. Middleware'inize $request->setTrustedProxies( [ $request->getClientIp() ] );CloudFlare'nin gönderdiği başlıklara güvendiğinizi söyleyen başka bir satır eklemeniz gerekir . Bu, yönlendirme döngüsünü durduracaktır.
Adam Link

2
@manix Harika. Bu hafta sonu kendi projemle bu HTTPS sayısını geçtim - bu küçük şeyler sizi saatlerce sinirlendirecek!
Adam Link

8
Mükemmel cevap! Yalnızca bir ayrıntı: Google'a bunun kalıcı bir hareket olduğunu belirtmek için bir 301 yönlendirmesi kullanmak daha iyidir. Gibi:return redirect()->secure($request->getRequestUri(), 301);
adriaroca

4
yük dengeleyici veya proxy altında olanlar için güvenli () $request->server('HTTP_X_FORWARDED_PROTO') != 'https'bu benim için çalışıyor
Shiro

63

Benim için çalışan başka bir seçenek, AppServiceProvider'da bu kodu önyükleme yöntemine yerleştirin:

\URL::forceScheme('https');

ForceSchema ('https') 'den önce yazılan işlev yanlıştı, forceScheme


16
Hey, bunu biraz önce etrafta dolaşarak buldum - 5.4'te olduğunu unutmayın\URL::forceScheme('https');
dev

5
Aynı dosyada şunları da yapabilirsinizif($this->app->environment() === 'production'){ $this->app['request']->server->set('HTTPS', true); }
Rory

2
Bunu mu demek istedin\URL::forceScheme('https')
Ernest Okot

17
Bunun sadece bağlantı oluşturmak için olduğuna eminim. Bu, kullanıcıyı https'ye zorlamaz, yalnızca başına https: //
Weston Watson

evet oldu @WestonWatson. bulunursa çözümü lütfen paylaşın
Harat

33

Alternatif olarak, Apache kullanıyorsanız .htaccess, URL'lerinizi httpsönek kullanmaya zorlamak için file'ı kullanabilirsiniz . Laravel 5.4'te dosyama aşağıdaki satırları ekledim ve benim .htaccessiçin çalıştı.

RewriteEngine On

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

2
Birden fazla ortamınız varsa (geliştirme, aşama, üretim), hepsinde SSL ayarlamanız gerekenden bu iyi değildir.
Mladen Janjetovic

@MladenJanjetovic bunu aşmak RewriteCond %{HTTP_HOST} !=localhostiçin dev üzerinde kullanabilirsiniz .
Dan

3
@Dan - Evet, ancak yine de aşama için yerel olarak ayarlamanız gerekecek (ve geliştiriciler yerel geliştirmede farklı URL'ler kullanıyorsa, yani .dev, .local, alt alanlar, ... vb.) Uygulamada bu tür bir mantığın olmasını tercih ederim.
Mladen Janjetovic

16

laravel 5.4 için .htaccess yerine https yönlendirmesini almak için bu biçimi kullanın

namespace App\Providers;

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

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

15
Sadece açıklığa kavuşturmak için: 1) bu değişiklikler app / Providers / AppServiceProvider.php içinde yapılmalıdır; 2) bu sadece uygulama içinde oluşturulan bağlantıları SSL kullanacak şekilde ayarlamak içindir, sizi SSL kullanmaya zorlamaz
phoenix

Merhaba, Rota bu yöntemle oluşturulmuyor, eğer beni bir sonraki rotaya gönderen bir düğmeye tıklarsam bana 404 hatası vermiyor
Saket Sinha

Bu bir https yönlendirmesi değildir. Ancak https: // sitesinin sunulmasına izin verir. Http: // olarak değiştirirseniz, hizmet de verecektir.
frangı

12

Manix'in cevabına benzer ama tek bir yerde. HTTPS'yi zorlamak için ara yazılım

namespace App\Http\Middleware;

use Closure;

use Illuminate\Http\Request;

class ForceHttps
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!app()->environment('local')) {
            // for Proxies
            Request::setTrustedProxies([$request->getClientIp()]);

            if (!$request->isSecure()) {
                return redirect()->secure($request->getRequestUri());
            }
        }

        return $next($request);
    }
}

İsteğin statik olması gerekiyor mu?
GFxJamal

@jRhesk muhtemelen değil, ama lütfen cevabı değiştirmekten çekinmeyin
Mladen Janjetovic

8

Bu Larave 5.2.x ve üstü içindir. Bazı içerikleri HTTPS üzerinden ve diğerlerini HTTP üzerinden sunma seçeneğine sahip olmak istiyorsanız, işte benim için çalışan bir çözüm. Merak ediyor olabilirsiniz, birisi neden yalnızca bazı içerikleri HTTPS üzerinden sunmak ister? Neden her şeyi HTTPS üzerinden sunmuyorsunuz?

Tüm siteyi HTTPS üzerinden sunmak tamamen iyi olsa da, her şeyi HTTPS üzerinden ayırmanın sunucunuzda ek bir yükü vardır. Şifrelemenin ucuza gelmediğini unutmayın. Hafif ek yük, uygulamanızın yanıt süresine de etki eder. Emtia donanımının ucuz olduğunu ve etkisinin ihmal edilebilir olduğunu söyleyebilirsiniz ama konuya değiniyorum :) Pazarlama içeriği büyük sayfalar, görseller vb. İle sunulması fikrini https üzerinden sevmiyorum. İşte başlıyor. Başkalarının ara yazılım kullanarak yukarıda önerdiklerine benzer, ancak HTTP / HTTPS arasında geçiş yapmanıza izin veren tam bir çözümdür.

Önce bir ara katman yazılımı oluşturun.

php artisan make:middleware ForceSSL

Ara yazılımınızın nasıl görünmesi gerektiği budur.

<?php

namespace App\Http\Middleware;

use Closure;

class ForceSSL
{

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

        if (!$request->secure()) {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

Hem yerel geliştirme hem de üretim için HTTPS kurulumuna sahip olduğum için ortama dayalı filtreleme yapmadığımı unutmayın, bu yüzden buna gerek yoktur.

Aşağıdakileri routeMiddleware \ App \ Http \ Kernel.php dosyanıza ekleyin, böylece hangi yönlendirme grubunun SSL'yi zorlaması gerektiğini seçebilir ve seçebilirsiniz.

    protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'forceSSL' => \App\Http\Middleware\ForceSSL::class,
];

Ardından, iki temel gruba giriş / kayıt vb. Ve Auth ara yazılımın arkasındaki diğer her şeyi güvence altına almak istiyorum.

Route::group(array('middleware' => 'forceSSL'), function() {
/*user auth*/
Route::get('login', 'AuthController@showLogin');
Route::post('login', 'AuthController@doLogin');

// Password reset routes...
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');

//other routes like signup etc

});


Route::group(['middleware' => ['auth','forceSSL']], function()
 {
Route::get('dashboard', function(){
    return view('app.dashboard');
});
Route::get('logout', 'AuthController@doLogout');

//other routes for your application
});

Ara yazılımlarınızın rotalarınıza konsoldan düzgün şekilde uygulandığını doğrulayın.

php artisan route:list

Artık uygulamanızın tüm formlarını veya hassas alanlarını güvence altına aldınız, şimdi önemli olan, güvenli ve genel (https olmayan) bağlantılarınızı tanımlamak için görünüm şablonunuzu kullanmaktır.

Yukarıdaki örneğe dayanarak, güvenli bağlantılarınızı aşağıdaki gibi oluşturursunuz -

<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>

Güvenli olmayan bağlantılar şu şekilde oluşturulabilir:

<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>

Bunun yaptığı şey, https: // yourhost / login ve http: // yourhost / aboutus gibi tam nitelikli bir URL oluşturur.

Http ile tam nitelikli URL oluşturmadıysanız ve göreli bir bağlantı url'si ('/ aboutus') kullanıyorsanız, bir kullanıcı güvenli bir siteyi ziyaret ettikten sonra https devam eder.

Bu yardımcı olur umarım!


7

Https yönlendirmesine ulaşmak için .htaccess dosyasını kullanmaya ne dersiniz ? Bu, proje köküne yerleştirilmelidir (ortak klasöre değil). Sunucunuzun proje kök dizinini gösterecek şekilde yapılandırılması gerekiyor.

<IfModule mod_rewrite.c>
   RewriteEngine On
   # Force SSL
   RewriteCond %{HTTPS} !=on
   RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
   # Remove public folder form URL
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Bunu laravel 5.4 için kullanıyorum (bu cevabı yazarken en son sürüm), ancak laravel bazı işlevleri değiştirse veya kaldırsa bile özellik sürümleri için çalışmaya devam etmelidir.


Chrome bana bir hata veriyor: Çok fazla yönlendirme var .. Görünüşe göre bu bir döngü oluşturuyor
phoenix

Merhaba, cevabı güncelledim. Bu .htaccess'i proje kök dizinine koyduğunuzdan ve sunucunuzu (apache config) proje köküne yönlendirdiğinizden emin olun.
Maulik Gangani

1
@MladenJanjetovic Bu ortamlar için farklı htaccess dosyalarına sahip olabilirsiniz
Burgi

1
@MladenJanjetovic'in uygulamada olmasının kesinlikle avantajları vardır, ancak verimlilik ve hız açısından, Laravel'i sadece bir yönlendirme için yüklemenize gerek kalmaması için sunucu yapılandırmasında bunun avantajlı olduğunu söyleyebilirim. Tek sürümlü .htaccess'te ortama özgü yapılandırmalar, etki alanını kontrol etmek için bir yeniden yazma koşulu kullanılarak gerçekleştirilebilir, örneğinRewriteCond %{HTTP_HOST} productiondomain\.com$ [NC]
Chris

1
Ben de bunu .htaccess'e kök dizine yerleştirmeyi tercih ederim ve Crhis'in dediği gibi, ortama özgü ayarlar, Mladen'in çözümünden biraz daha az zarif olsa da burada gerçekleştirilebilir.
jovan

6

Index.php ile aynı klasöre ssl'yi zorlamak için RewriteRule'u kullanabilirsiniz.
Lütfen resim iliştirme olarak ekleyin, diğer kurallardan önce ekleyin ssl .htaccess ayarı


4

Bu konuda çok acı çektiğim için bu alternatifi ekliyorum. Tüm farklı yolları denedim ve hiçbir şey işe yaramadı. Ben de bunun için bir çözüm buldum. En iyi çözüm olmayabilir ama işe yarıyor -

Bilginize, Laravel 5.6 kullanıyorum

if (App::environment('production')) {
    URL::forceScheme('https');
}

üretim <- .env dosyanızdaki APP_ENV değeriyle değiştirilmelidir


3

IndexController.php içinde

public function getIndex(Request $request)
{
    if ($request->server('HTTP_X_FORWARDED_PROTO') == 'http') {

        return redirect('/');
    }

    return view('index');
}

AppServiceProvider.php içinde

public function boot()
{
    \URL::forceSchema('https');

}

AppServiceProvider.php'de her yönlendirme url https'ye gidecek ve http isteği için IndexController.php'de bir kez yeniden yönlendirmeye ihtiyacımız var Sadece bir kez yeniden yönlendirme yapmamız gerekiyor


Cevabınızın soruyu nasıl çözdüğünü açıklayabilir misiniz?
soundslikeodd

Lütfen bu açıklamayı cevabınıza ekleyin.
soundslikeodd


2

İşte Heroku'da nasıl yapılacağı

Dynos'larınızda SSL'yi zorlamak, ancak yerel olarak zorlamak için .htaccess'inizin sonuna public / ekleyin:

# Force https on heroku...
# Important fact: X-forwarded-Proto will exist at your heroku dyno but wont locally.
# Hence we want: "if x-forwarded exists && if its not https, then rewrite it":
RewriteCond %{HTTP:X-Forwarded-Proto} .
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Bunu yerel makinenizde aşağıdakilerle test edebilirsiniz:

curl -H"X-Forwarded-Proto: http" http://your-local-sitename-here

Bu, X-iletilen üstbilgiyi, heroku'da alacağı biçime ayarlar.

yani, bir heroku dinozorunun bir isteği nasıl göreceğini simüle eder.

Bu yanıtı yerel makinenizde alacaksınız:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://tm3.localhost:8080/">here</a>.</p>
</body></html>

Bu bir yönlendirmedir. .Htaccess'i yukarıdaki gibi ayarlarsanız, heroku'nun müşteriye geri vereceği şey budur. Ancak bu, yerel makinenizde gerçekleşmez çünkü X-yönlendirilmiş ayarlanmayacaktır (ne olduğunu görmek için yukarıda curl ile numara yaptık).


2

CloudFlare kullanıyorsanız, her zaman HTTPS kullanmak için bir Sayfa Kuralı oluşturabilirsiniz: SSL Cloudflare'yi zorla Bu, her http: // isteğini https: //'ye yönlendirir.

Buna ek olarak, \ app \ Providers \ AppServiceProvider.php boot () işlevinize şöyle bir şey eklemeniz gerekir:

if (env('APP_ENV') === 'production' || env('APP_ENV') === 'dev') {
     \URL::forceScheme('https');
}

Bu, uygulamanızdaki her bağlantı / yolun http: // yerine https: // kullanmasını sağlar.


2

Laravel 5.7'de test edilen biraz farklı bir yaklaşım

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Str;

class ForceHttps
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {    
        if ( !$request->secure() && Str::startsWith(config('app.url'), 'https://') ) {
            return redirect()->secure($request->getRequestUri());
        }
        return $next($request);
    }
}

PS. @ Matthias-lill'in yorumlarına göre güncellenen kod.


1
Laravel 6'da da çalışıyor.
Rubens

1
env () işlevlerinin kullanılması önbelleğe alınmış yapılandırma dosyalarıyla çalışmayacaktır. Bunun config('app.url')yerine işaret etmelidir . Ayrıca, Laravel çok kullanışlı bir dizgi işlevi ile birlikte gelir Str::startsWith(config('app.url'), 'https://').
Matthias Lill

1

Laravel 5.6 için, çalışmasını sağlamak için durumu biraz değiştirmem gerekiyordu.

dan:

if (!$request->secure() && env('APP_ENV') === 'prod') {
return redirect()->secure($request->getRequestUri());
}

Kime:

if (empty($_SERVER['HTTPS']) && env('APP_ENV') === 'prod') {
return redirect()->secure($request->getRequestUri());
}

1

Bu benim için çalıştı. Https'ye yönlendirmeye zorlamak için özel bir php kodu yaptım. Sadece bu kodu header.php'ye ekleyin

<?php
if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
$notssl = 'http://';
if($protocol==$notssl){
    $url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";?>
    <script> 
    window.location.href ='<?php echo $url?>';
    </script> 
 <?php } ?>

1

Laravel 5.6.28'de sonraki ara yazılım kullanıyorum:

namespace App\Http\Middleware;

use App\Models\Unit;
use Closure;
use Illuminate\Http\Request;

class HttpsProtocol
{
    public function handle($request, Closure $next)
    {
        $request->setTrustedProxies([$request->getClientIp()], Request::HEADER_X_FORWARDED_ALL);

        if (!$request->secure() && env('APP_ENV') === 'prod') {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

1

En kolay yol, uygulama düzeyinde olacaktır. Dosyanın içinde

app/Providers/AppServiceProvider.php

aşağıdakileri ekleyin:

use Illuminate\Support\Facades\URL;

ve boot () yönteminde aşağıdakileri ekleyin:

$this->app['request']->server->set('HTTPS', true);
URL::forceScheme('https');

Bu, tüm istekleri uygulama düzeyinde https'ye yönlendirmelidir.

(Not: Bu, laravel 5.5 LTS ile test edilmiştir)


1

Basitçe uygulamaya gidebilirsiniz -> Sağlayıcılar -> AppServiceProvider.php

iki satır ekle

Illuminate \ Support \ Facades \ URL kullanın;

URL :: forceScheme ( 'https');

aşağıdaki kodlarda gösterildiği gibi:

use Illuminate\Support\Facades\URL;

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

       // any other codes here, does not matter.
    }

0

Benim için bu çalışma laravel 7.x içinde 3 basit adımda bir yazılım kullanılması:

1) Ara yazılımı komutla oluşturun php artisan make:middleware ForceSSL

Ara Katman

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;

class ForceSSL
{
    public function handle($request, Closure $next)
    {
        if (!$request->secure() && App::environment() === 'production') {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

2) Ara yazılımı routeMiddlewareKernel dosyasında kaydedin

Çekirdek

protected $routeMiddleware = [
    //...
    'ssl' => \App\Http\Middleware\ForceSSL::class,
];

3) Rotalarınızda kullanın

Rotalar

Route::middleware('ssl')->group(function() {
    // All your routes here

});

burada ara yazılımlar hakkında tam belgeler

========================

.HTACCESS Yöntemi

Bir .htaccessdosya kullanmayı tercih ederseniz , aşağıdaki kodu kullanabilirsiniz:

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://yourdomain.com/$1 [R,L]
</IfModule>

Saygılarımızla!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.