จริงๆแล้วจะไม่มีการสื่อสารเกิดขึ้นระหว่าง Apache และ WordPress "เวทมนต์" กำลังเกิดขึ้นในmod_rewrite
กฎApache
สำหรับการติดตั้ง WordPress แบบมาตรฐานคุณมีกฎดังต่อไปนี้.htaccess
:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
สังเกตบรรทัดนี้: ที่RewriteRule . /index.php [L]
นี่เรากำลังบอก Apache ให้เปลี่ยนเส้นทางการร้องขอ URL /index.php
ภายใน
เว้นแต่:บรรทัดนี้:RewriteCond %{REQUEST_FILENAME} !-f
กลายเป็นเท็จ ซึ่งหมายความว่ามีการเพิ่มนี้RewriteCond
กับข้างต้นRewriteRule
เราจะบอก Apache เพื่อส่งคำขอทั้งหมด/index.php
แต่ไม่ได้ถ้าหากมันเป็นไฟล์ที่มีอยู่
นอกจากนี้เมื่อบรรทัดนี้:RewriteCond %{REQUEST_FILENAME} !-d
กลายเป็นเท็จ ซึ่งหมายความว่ามีการเพิ่มนี้RewriteCond
กับข้างต้นRewriteRule
เราจะบอก Apache ส่งคำขอทั้งหมดไป/index.php
แต่ไม่ได้ถ้ามันไดเรกทอรีที่มีอยู่
ดังนั้นในที่สุดถ้ามันเป็นไฟล์ที่มีอยู่หรือไดเรกทอรีที่มีอยู่ Apache จะส่งคำขออื่น ๆ ทั้งหมดไป/index.php
ภายใน
อย่างที่คุณเห็นไม่มีการสื่อสารใดเกิดขึ้นระหว่าง Apache และ WordPress Apache กำลังตัดสินใจทุกอย่างเองและเรากำลังบอกให้ใช้RewriteRule
และRewriteCond
สั่ง
อ่านเพิ่มเติมเกี่ยวกับที่นี่mod_rewrite