ວິທີການປະຕິບັດການປ່ຽນເສັ້ນທາງພາຍໃນດ້ວຍ mod_rewrite ໃນ Apache


ໃນບົດຂຽນນີ້ແລະໃນບົດຕໍ່ໄປພວກເຮົາຈະອະທິບາຍວິທີການໃຊ້ mod_rewrite, ເພື່ອວາງແຜນການຮ້ອງຂໍ HTTP ທີ່ແນ່ນອນໄປຫາ ໜ້າ ອື່ນໆໃນເວບໄຊທ໌, ຫລື URL ພາຍນອກ.

ເວົ້າອີກຢ່າງ ໜຶ່ງ, ໂມດູນ Apache ທີ່ມີຊື່ສຽງນີ້ຈະຊ່ວຍໃຫ້ທ່ານສາມາດໂອນ URL ໄປຫາອີກອັນ ໜຶ່ງ, ເຊິ່ງພວກເຮົາຈະສະແດງໃຫ້ເຫັນຜ່ານຕົວຢ່າງພາກປະຕິບັດ.

ໝາຍ ເຫດ: ຕົວຢ່າງຂ້າງລຸ່ມນີ້ສົມມຸດວ່າທ່ານຢ່າງ ໜ້ອຍ ມີຄວາມຄຸ້ນເຄີຍກັບການສະແດງອອກແບບປົກກະຕິຂອງ Perl (PCRE). ເນື່ອງຈາກຫົວຂໍ້ນັ້ນບໍ່ຢູ່ໃນຂອບເຂດຂອງບົດຂຽນນີ້, ອ້າງອີງໃສ່ເອກະສານ Perl 5 ລຸ້ນ 24.0 ສຳ ລັບລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບ PCRE.

ກ່ອນທີ່ຈະດໍາເນີນການ, ໃຫ້ແນ່ໃຈວ່າໂມດູນການຂຽນຄືນໃຫມ່ຖືກໂຫລດແລ້ວ. ເຖິງແມ່ນວ່ານີ້ແມ່ນພຶດຕິ ກຳ ເລີ່ມຕົ້ນໃນ CentOS ແລະການແຈກຢາຍທີ່ຄ້າຍຄືກັນ, ໃນ Debian ແລະອະນຸພັນທ່ານຈະຕ້ອງໂຫຼດມັນດ້ວຍຕົນເອງດັ່ງຕໍ່ໄປນີ້:

# a2enmod rewrite

ການຕັ້ງຄ່າ Apache ໃຫ້ໃຊ້ Mod_rewrite Module

ເພື່ອຄວາມລຽບງ່າຍ, ໃຫ້ໃຊ້ເວບໄຊທ໌ເລີ່ມຕົ້ນໃນຊ່ອງ CentOS 7 (IP 192.168.0.100) ເພື່ອອະທິບາຍວິທີການໃຊ້ mod_rewrite (DocumentRoot:/var/www/html, ເອກະສານການຕັ້ງຄ່າ: /etc/httpd/conf/httpd.conf).

ເພື່ອໃຫ້ Apache ໃຊ້ໂມດູນນີ້, ເພີ່ມສາຍຕໍ່ໄປນີ້ໃນເອກະສານການຕັ້ງຄ່າ:

RewriteEngine on

ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະສັງເກດວ່າການຕັ້ງຄ່ານີ້ຈະບໍ່ໄດ້ຮັບການສືບທອດໂດຍເຈົ້າຂອງເສມືນໃນຫ້ອງດຽວກັນ.

ດັ່ງນັ້ນ, ທ່ານຈະຕ້ອງເພີ່ມ RewriteEngine ສຳ ລັບເຈົ້າພາບເສມືນແຕ່ລະບ່ອນທີ່ທ່ານຕ້ອງການໃຊ້ກົດລະບຽບການຂຽນ ໃໝ່.

ການປ່ຽນເສັ້ນທາງພາຍໃນແມ່ນຕົວຢ່າງທີ່ງ່າຍດາຍທີ່ສຸດຂອງ mod_rewrite. ຖ້າທ່ານຕ້ອງການປ່ຽນເສັ້ນທາງການຮ້ອງຂໍທັງ ໝົດ ສຳ ລັບ default.aspx ຫາ index.html, ເພີ່ມສາຍຕໍ່ໄປນີ້ (ຍັງເອີ້ນວ່າກົດລະບຽບການຂຽນ ໃໝ່) ພາຍໃຕ້ RewriteEngine on:

RewriteRule "^/default\.aspx$" "/index.html"

ແລະຢ່າລືມທີ່ຈະເລີ້ມ Apache ໃໝ່ ເພື່ອໃຫ້ການປ່ຽນແປງມີຜົນ.

ສິ່ງນີ້ອາດຈະ ນຳ ໃຊ້ໄດ້ງ່າຍຖ້າເວັບໄຊທ໌ຂອງທ່ານຖືກອອກແບບມາໂດຍໃຊ້ ASP ແລະຕໍ່ມາກໍ່ປ່ຽນເປັນ HTML5 ທຳ ມະດາ. ເຄື່ອງຈັກຊອກຫາຈະມີເອກະສານດັດສະນີ .aspx ແຕ່ວ່າເອກະສານນັ້ນບໍ່ມີອີກຕໍ່ໄປ.

ໃນກໍລະນີດັ່ງກ່າວ, ທ່ານ ຈຳ ເປັນຕ້ອງຊອກຫາວິທີທີ່ຈະປ່ຽນເສັ້ນທາງການຮ້ອງຂໍເພື່ອວ່ານັກທ່ອງທ່ຽວທີ່ຄາດຫວັງຂອງທ່ານຈະບໍ່ເຂົ້າໄປໃນ ໜ້າ ທີ່ຜິດພາດ. ເພື່ອທົດສອບ, ໃຫ້ສ້າງເອກະສານ HTML ງ່າຍໆທີ່ມີຊື່ວ່າ index.html ພາຍໃນ/var/www/html ດ້ວຍເນື້ອໃນຕໍ່ໄປນີ້:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<title>New site</title>
  </head>
  <body>
	<h2>Default.aspx was here, but now it's index.html</h2>
  </body>
</html>

ເຄື່ອງ ໝາຍ ລະຫັດແລະເງີນໂດລາຈະເຮັດໃຫ້ ຄຳ ເວົ້າປົກກະຕິກົງກັບລະຫັດເລີ່ມຕົ້ນດ້ວຍ /default ແລະສິ້ນສຸດດ້ວຍ .aspx ຕາມ ລຳ ດັບ.

ຕອນນີ້ເປີດຕົວທ່ອງເວັບຂອງທ່ານແລະຊີ້ໄປທີ່ 192.168.0.100/default.aspx. ຖ້າສິ່ງທີ່ປະຕິບັດໄດ້ຕາມຄາດ ໝາຍ, Apache ຄວນໃຫ້ບໍລິການ index.html ແທນ.
ເຖິງຢ່າງໃດກໍ່ຕາມ, ຜູ້ໃຊ້ສຸດທ້າຍຈະຍັງຄົງເຫັນ default.aspx ຢູ່ແຖບທີ່ຢູ່ເຊິ່ງເຮັດໃຫ້ການປ່ຽນແປງມີຄວາມໂປ່ງໃສທັງ ໝົດ:

ຖ້າທ່ານຕ້ອງການໃຫ້ URL ທີ່ຢູ່ໃນແຖບທີ່ຢູ່ສະແດງໃຫ້ເຫັນວ່າເຊີຟເວີມັນ ກຳ ລັງໃຫ້ບໍລິການ index.html ແທນ ໜ້າ ທີ່ມີຊື່ວ່າ default.aspx , ເພີ່ມ [R, L] ຮອດທ້າຍຂອງກົດລະບຽບການຂຽນ ໃໝ່ ດັ່ງຕໍ່ໄປນີ້:

RewriteRule "^/default\.aspx$" "/index.html" [R,L]

ທີ່ນີ້ [R, L] ແມ່ນສອງທຸງທາງເລືອກທີ່ຊີ້ບອກວ່າຕ້ອງມີການປ່ຽນເສັ້ນທາງ HTTP ທີ່ສົມບູນແບບໃຫ້ກັບຕົວທ່ອງເວັບ (R) ແລະວ່າບໍ່ຄວນມີການປະມວນຜົນຕໍ່ໄປອີກ:

ໃຫ້ສັງເກດວິທີທີ່ແຖບທີ່ຢູ່ປະຈຸບັນສະແດງ index.html , ຕາມທີ່ຄາດໄວ້, ແທນທີ່ຈະເປັນ default.aspx ຄືກັບທີ່ມັນໄດ້ເຮັດກ່ອນ ໜ້າ ນີ້.

ໃນບົດຂຽນນີ້ພວກເຮົາໄດ້ອະທິບາຍວິທີການໃຊ້ mod_rewrite ເພື່ອ ດຳ ເນີນການປ່ຽນເສັ້ນທາງພາຍໃນ. ຕິດຕາມການໄປສະນີຕໍ່ໄປບ່ອນທີ່ພວກເຮົາຈະຮຽນຮູ້ວິທີການປ່ຽນເສັ້ນທາງໄປຫາແຫລ່ງຂໍ້ມູນທີ່ຖືກຍ້າຍໄປທີ່ server ທີ່ແຕກຕ່າງກັນ, ແລະວິທີການຂຽນ ໃໝ່ ທຸງ.

ໃນຖານະເປັນສະເຫມີ, ຮູ້ສຶກບໍ່ເສຍຄ່າທີ່ຈະໃຊ້ແບບຟອມຄໍາເຫັນຂ້າງລຸ່ມນີ້ຖ້າທ່ານມີຄໍາຖາມຫຼືຄໍາຕິຊົມໃດໆກ່ຽວກັບບົດຄວາມນີ້. ພວກເຮົາຫວັງວ່າຈະໄດ້ຍິນຂ່າວຈາກທ່ານ!