اذهب إلى المحتوى

السؤال

نشر

أقوم بتحديث نسخة لارافيل قديمة، ولدي الكود التالي لتحويل الطلبات إلى HTTPS:

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

ما الإجراء الذي يمكنني إضافته لتحويل الطلبات من http إلى https في لارافيل؟

Recommended Posts

  • 0
نشر

يمكن استخدام Request::isSecure الذي تقدمه لارافيل وإنشاء وسيط middleware بهذه الطريقة:

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); 
    }
}

وبذلك يقوم الصف HttpsProtocol بتحويل جميع الطلبات إلى Https والتي قادمة من http وأيضاً إذا كانت البيئة الحالية هي بيئة النشر، لتجنب الأخطاء بين التطوير والنشر للمشروع.

ولتطبيقه نقوم أيضاً بإضافته ضمن Kernel.php:

protected $middleware = [
   	......

    'MyApp\Http\Middleware\HttpsProtocol'   
	
	.....

];

ووفقاً للتوثيق الرسمي، عند استخدام CDN كـ Cloudflare على سبيل المثال، سيتم تمرير X-Forwarded-Protocol إلى خادم الويب عن طريق Http وعندها سيتم الدخول في حلقة لانهائية وستبقى الصفحة تقوم بالتحديث بدون عرض محتوياتها، لذلك يجب أيضاً إضافة الكود التالي إلى الوسيط السابق:

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

لتأمين الوثوقية في الترويسة المرسلة من قبل Cloudflare وعدم الدخول في حلقة لانهائية.

أما في حال وجود بيئة واحدة فقط مثلاً production ولا يتم تطوير المشروع على بيئات مختلفة، فيمكن التحويل إلى https بتعديل ملف htaccess كالتالي:

RewriteEngine On

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

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...