Kami baru-baru ini mengganti salah satu server web kami ke apache 2.4 dan menjalankan PHP melalui php-fpm dan mod_proxy_fcgi. Kebanyakan semuanya bekerja dengan baik, tetapi ada satu masalah yang saya belum mengerti. Salah satu situs kami menjalankan WordPress, yang membawa daftar aturan penulisan ulang yang baik dalam file .htaccess-nya. Dan tampaknya itu tidak bekerja dengan baik dengan arahan ProxyPass di pengaturan vhost.
Vhost kami berisi konfigurasi berikut:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.2:9126/<path>/$1
Ini berfungsi dalam banyak kasus.
Sekarang, file htaccess tidak, antara lain, ini:
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]
Karena situs ini adalah multiblog dalam subdirektori, saya membaca bahwa URL /blogname/wp-admin/load-styles.php?xxxx harus ditulis ulang sebagai wp-admin / load-styles.php? Xxx (aturan penulisan ulang kedua). Tetapi melihat pada mod_proxy log, permintaan yang dikirimkan sebenarnya adalah /blogname/wp-admin/load-styles.php.
Saya membaca ini karena ada masalah yang diutamakan - aturan ProxyPass menyala sebelum semua RewriteRules diselesaikan.
Saya terhalang - apa yang bisa menjadi penyebabnya?
sumber
RewriteRule
dengan[P]
bendera, di bawah aturan lain?Jawaban:
Saya menemukan solusi ini, saya tidak tahu apakah itu cara terbaik, tetapi bekerja untuk saya.
Hapus garis:
Tambahkan ini dalam arahan Anda:
Semua file php asli akan dialihkan ke proxy fcgi.
Dan " RewriteOptions InheritBefore " Ini memaksa konfigurasi saat ini untuk mewarisi konfigurasi induk, tetapi diterapkan sebelum aturan yang ditentukan dalam lingkup anak (.htaccess di direktori). Apakah satu-satunya cara yang saya temukan memiliki kompatibilitas antara konfigurasi fcgi dan klien .htaccess config.
Untuk mengontrol parameter lain yang Anda perlukan untuk proxy:
sumber
Dengan
ProxyPassMatch
,.htaccess
file diabaikan. Coba gunakanFilesMatch
danSetHandler
sebagai gantinya, seperti dijelaskan di sini dan di sini .sumber
Pindahkan logika penulisan ulang ke dalam ekspresi ProxyPassMatch. Tambahkan dua baris ProxyPassMatch tambahan sebelum yang ada di konfigurasi vhost Anda sebagai berikut:
sumber