Gần đây chúng tôi đã chuyển một trong các máy chủ web của chúng tôi sang apache 2.4 và chạy PHP thông qua php-fpm và mod_proxy_fcgi. Hầu hết mọi thứ hoạt động khá tốt, nhưng có một vấn đề mà tôi chưa hiểu. Một trong những trang web của chúng tôi đang chạy WordPress, nơi cung cấp một danh sách tốt các quy tắc viết lại trong tệp .htaccess của nó. Và dường như những thứ đó không hoạt động tốt với chỉ thị ProxyPass trong thiết lập vhost.
Vhost của chúng tôi chứa cấu hình sau:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.2:9126/<path>/$1
Điều này hoạt động trong hầu hết các trường hợp.
Bây giờ, tập tin htaccess thực hiện, trong số những thứ khác, điều này:
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
Vì trang web là một multiblog trong các thư mục con, tôi đọc rằng URL /blogname/wp-admin/load-styles.php?xxxx nên được viết lại dưới dạng wp-admin / load-style.php? Xxx (quy tắc viết lại thứ hai). Nhưng nhìn vào nhật ký mod_proxy, yêu cầu được chuyển thực sự là /blogname/wp-admin/load-styles.php.
Tôi đọc điều này vì có một vấn đề ưu tiên - quy tắc ProxyPass kích hoạt trước khi tất cả các RewriteRules đã được xử lý.
Tôi bị cản trở - điều gì có thể là nguyên nhân?
RewriteRule
với [P]
cờ, bên dưới các quy tắc khác không?