Trên thực tế không có giao tiếp xảy ra giữa Apache và WordPress. "Phép thuật" đang diễn ra trong mod_rewrite
các quy tắc của Apache .
Để cài đặt WordPress tiêu chuẩn, bạn có các quy tắc sau .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
Lưu ý dòng này: RewriteRule . /index.php [L]
Ở đây, chúng tôi đang bảo Apache chuyển hướng nội bộ bất kỳ yêu cầu URL nào sang /index.php
.
Trừ khi: dòng này:RewriteCond %{REQUEST_FILENAME} !-f
trở thành sai. Điều đó có nghĩa là, bằng cách thêm điều nàyRewriteCond
vào phần trênRewriteRule
, chúng tôi đang bảo Apache gửi tất cả các yêu cầu đến/index.php
, nhưng không phải nếu đó là một tệp hiện có .
Ngoài ra, khi dòng này:RewriteCond %{REQUEST_FILENAME} !-d
trở thành sai. Điều đó có nghĩa là, với việc thêm điều nàyRewriteCond
với ở trênRewriteRule
, chúng tôi đang bảo Apache gửi tất cả yêu cầu đến/index.php
, nhưng không phải nếu đó là một thư mục hiện có .
Vì vậy, cuối cùng, trừ khi đó là một tệp hiện có hoặc một thư mục hiện có, Apache sẽ gửi nội bộ tất cả các yêu cầu khác đến /index.php
.
Vì vậy, như bạn thấy, không có giao tiếp nào xảy ra giữa Apache & WordPress. Apache đang quyết định mọi thứ và chúng tôi đang bảo nó làm như vậy bằng cách sử dụng RewriteRule
và RewriteCond
chỉ thị.
Đọc thêm về mod_rewrite
ĐÂY .