เมื่อเราได้บรรจงเขียนโค้ดอย่างประณีตจนสำเร็จและถึงคราวที่จะต้องโชว์ของให้ชาวโลกได้เห็นสักที คือการ deploy แอพของเราขึ้น web hosting แต่ถ้าทุกอย่างราบรื่น สมบูรณ์ ก็คงไม่มีบทความนี้เกิดขึ้นมา เชื่อว่าบางคนเคยเจอปัญหานี้ วันนี้เรามาดูวิธีการ จัดการกับปัญหานี้กัน ลุยเล๊ยยยยย++
ปัญหาที่พบ!!
เมื่อเราพัฒนาเว็บไซต์จนถึงขั้นตอนที่เรานำ build file ไป deploy ขึ้น web hosting โดยส่วนใหญ่ที่ใช้จะมี 2 แบบ คือ Apache และ Nginx ซึ่งปัญหาที่พบคือ เมื่อ Request บาง URL จะขึ้น Error 404 Page Not Found ดังตัวอย่างด้านล่าง
วิธีแก้ไข
สำหรับบทความนี้จะแนะนำวิธีการแก้ไขปัญหาของ web server ทั้ง 2 แบบ
Apache
สำหรับ RHEL
- เปิด rewrite module
- เปิดไฟล์ Config เพื่อทำการแก้ไข
$ sudo nano /etc/httpd/conf/httpd.conf
- นำคอมเม้นท์ด้านหน้า(#) ออก
LoadModule rewrite_module modules/mod_rewrite.so
2. แก้ไข AllowOverride
- เปิดไฟล์ Config เพื่อแก้ไข
$ sudo nano /etc/httpd/conf/httpd.conf
- แก้ไข AllowOverride ในส่วนของ <Directory /var/www/html>
AllowOverride None เปลี่ยนจาก None เป็น AllAllowOverride All
- จากนั้น Restart apache
$ sudo service httpd restart
// หรือ CentOS/RHEL เวอร์ชั่น 7.x ขึ้นไป$ sudo systemctl restart httpd.service
สำหรับ Ubuntu
- เปิด rewrite module
เปิด rewrite module ด้วยคำสั่งนี้
$ sudo a2enmod rewrite$ sudo systemctl restart apache2
หรือ
$ sudo service apache2 reload
**เพิ่มเติม
// เปิด rewrite module
$ sudo a2enmod rewrite// ปิด rewrite module
$ sudo a2dismod rewrite// เช็ค rewrite module
$ sudo a2query -m rewrite
2. แก้ไขไฟล์ Config
- เปิดไฟล์ Config เพื่อแก้ไข
nano /etc/apache2/sites-available/000-default.conf
- เพิ่มคำสั่งด้านล่างใน <VirtualHost>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
- จากนั้น Restart apache
$ sudo systemctl restart apache2
ส่วนสุดท้ายคือ เพิ่มไฟล์ .htaccess ใน document root (/public_html) ของโปรเจค
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
เป็นอันเสร็จพิธี :)
httpd is the same as apache2. It depends on the OS you use. For example in RHEL it is called httpd and in Ubuntu it is called apache2.
Nginx
- เปิดไฟล์ Config เพื่อแก้ไข
$ sudo nano /etc/nginx/conf.d/default.conf
- เพิ่ม try_files ใน block server ส่วนของ location ดังตัวอย่างด้านล่าง
location / {
...
try_files $uri $uri/ /index.html;
}
- จากนั้น Restart Nginx
$ sudo service nginx restart หรือ$ sudo systemctl restart nginx
เป็นอันเสร็จพิธี :)
Reference:
(ข้อมูลอาจมีข้อผิดพลาด ถ้าจะเอาบทความนี้ไปอ้างอิงที่อื่นให้ตรวจสอบให้ดีก่อนนะครับ ขอบคุณครับ)
สำหรับวันนี้ ต้องขอลาไปก่อน สวัสดีครับ NottDev :)