CodeIgniter กับปัญหา base_url() บนเครื่องที่ติดตั้ง IIS และ Apache หรือเว็บเซิร์ฟเวอร์ที่ IP ต่างกัน

โดย SONGCHAI SAETERN

CodeIgniter กับปัญหา base_url()



ปัญหานี้เกิดขึ้นหลังจากที่เปลี่ยนมาใช้ CodeIgnditer เวอร์ชั่น 3.1.6 (ก่อนหน้านี้ใช้เวอร์ชั่น 2 สามารถเรียก base_url() ได้ปกติ) ปรากฏว่าเวอร์ชั่นใหม่นี้ จะแสดง URL เป็นไอพี ตามที่ได้ตั้งไว้กับ IIS ซึ่งเป็นเซริฟเวอร์อีกตัว ทำให้โหลดไฟล์ JS, CSS ต่างๆไม่ได้


เมื่อ echo base_url()  ออกมาดู จะเห็น URL ที่ไม่ตรงกับในช่อง url address








หลังจากค้นหาวิธีอยู่นานสองนาน ก็ได้คำตอบว่า
1. ปรับค่า $config['base_url'] ให้ตรงตาม project
2. เขียนโค้ดเพิ่มเติมโดยอ่านจาก $_SERVER



ซึ่งตัวผมเลือกใช้แบบเขียนโค้ดเพิ่มเพื่อดึงค่า URL ปัจจุบันมาใส่ใน config เพราะเวลาเปลี่ยนโปรเจ็กต์ หรืออัพขึ้นโฮสต์จริง จะได้ไม่ต้องตามไปแก้ไขอีก



เมื่อรีเฟรชหน้าเว็บโปรเจ็กต์อีกครั้ง จะเห็นว่า Template แสดงผลได้ถูกต้อง และ ค่าที่ echo base_url() ออกมาตรงกับที่ช่อง URL ADDRESS




สำหรับส่วนที่ต้องแก้ไขนั้นอยู่ในไฟล์นี้

application/config/config.php

$potocal = 'http'.((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 's' : '');
$directory = str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
$base_url = $potocal . '://'.$_SERVER['HTTP_HOST'] . $directory;
$config['base_url'] = $base_url;

:: ที่มา ::

CodeIgniter base_url(), link in localhost gives me to live server
https://stackoverflow.com/questions/29474848/codeigniter-base-url-link-in-localhost-gives-me-to-live-server