075-845-490 | 097-165-2449
Line ID: @hostnakhonitech
🎉 โปรโมชั่นพิเศษ! ลด 10% สำหรับลูกค้าใหม่
NakhoniTech
075-845-490
support@NakhoniTech.com

วิธีแก้ปัญหา Webhook ไม่ได้รับค่า Query String (Flask + Passenger + .htaccess) Print

  • 0

 วิธีแก้ปัญหา Webhook ไม่ได้รับค่า Query String (Flask + Passenger + .htaccess)

หากคุณใช้งานแอป Python (Flask) ผ่าน Phusion Passenger บนโฮสต์ที่ใช้ Apache แล้วพบว่าแอปของคุณ ไม่สามารถรับค่าจาก Query String ได้ เช่น

https://yourdomain.com/webhook?hub.mode=subscribe&hub.verify_token=test

แต่โค้ด Flask ได้รับค่าแบบนี้:

request.query_string  ➜  b''
request.args.get('hub.verify_token')  ➜  None

แสดงว่า Apache ไม่ได้ส่งค่า ?param=value ไปยังแอป Flask ของคุณ


✅ วิธีแก้ไขโดยใช้ .htaccess

  1. เข้าไปยังโฟลเดอร์ที่เก็บโปรเจกต์ของคุณ เช่น /home/USERNAME/your_flask_project/
  2. สร้างหรือเปิดไฟล์ชื่อ .htaccess
  3. ใส่โค้ดต่อไปนี้:
PassengerEnabled on
PassengerAppRoot /home/USERNAME/your_flask_project

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://127.0.0.1:5000/$1 [P,L,QSA]

อย่าลืมแก้ USERNAME และชื่อโฟลเดอร์ให้ตรงกับของคุณจริง ๆ


 คำอธิบายแต่ละคำสั่ง

  • PassengerEnabled on ➜ เปิดใช้งาน Passenger
  • PassengerAppRoot ➜ กำหนด path ของแอป Flask
  • RewriteEngine On ➜ เปิดการ rewrite
  • RewriteCond %{REQUEST_FILENAME} !-f ➜ ตรวจสอบว่าไม่ใช่ไฟล์จริง
  • [P,L,QSA] ➜ สำคัญมาก! ใช้ QSA เพื่อแนบ query string ไปด้วย

✅ ทดสอบผลลัพธ์

เรียก URL แบบนี้:

https://yourdomain.com/webhook?hub.verify_token=abc123

แล้วตรวจสอบใน Flask:

print(request.query_string) ➜ b'hub.verify_token=abc123'
print(request.args.get("hub.verify_token")) ➜ 'abc123'

 หมายเหตุ

  • คุณไม่ต้องรีสตาร์ท Apache เมื่อแก้ไขไฟล์ .htaccess
  • หากยังไม่ได้ผล ให้ตรวจสอบว่าเซิร์ฟเวอร์อนุญาต .htaccess โดยตั้งค่า AllowOverride All ใน Apache VirtualHost แล้ว

หากคุณยังมีคำถามเพิ่มเติม หรือต้องการให้เจ้าหน้าที่ช่วยตรวจสอบการตั้งค่า Passenger หรือ Apache ของคุณเพิ่มเติม กรุณาติดต่อฝ่ายเทคนิคของเราได้ตลอดเวลา


Was this answer helpful?

« Back