Saya sedang dalam proses memigrasi banyak situs dari yang lama ke konfigurasi server baru. Setiap situs didasarkan pada basis kode yang sama (tapi sayangnya tidak identik), menggunakan mod_rewrite URL.
- Ubuntu 8.04 LTS => Ubuntu 12.04 LTS
- Apache 2.22.8 => Apache 2.2.22
- PHP 5.2 (FastCGI) => PHP 5.3 (PHP5-FPM)
Sebagian besar berfungsi seperti pesona, tetapi pada konfigurasi baru $ _SERVER ['REDIRECT_URL'] tidak lagi disetel, dan kode gagal karena ketergantungan pada variabel global ini.
Dari apa yang saya mengerti, variabel ini diatur oleh Apache ketika terjadi redirect. Jelas ini tidak terjadi sekarang, tetapi saya berjuang untuk menemukan penyebabnya.
- Apakah ini pembaruan Apache, atau (tebakan saya) beralih dari PHP FastCGI ke PHP5-FPM?
- Bagaimana saya mendapatkan variabel ini kembali?
Saya benar-benar lebih suka tidak perlu mengedit kode di setiap situs, jadi saya akan mengatur auto_prepend PHP global jika perlu, tetapi idealnya saya ingin memperbaiki konfigurasi server dan mengatur ini di tempat pertama.
Terkait potensial: Saya sekarang juga memiliki beberapa variabel $ _SERVER baru, yaitu REDIRECT_SCRIPT_URL dan REDIRECT_REDIRECT_SCRIPT_URL. Ini tampaknya memiliki data yang benar yang saya inginkan untuk REDIRECT_URL, tetapi juga tampaknya menunjukkan ada dua pengalihan internal yang tidak terjadi sebelumnya - pencarian Google untuk REDIRECT_REDIRECT_SCRIPT_URL hanya mengembalikan output var_dump acak. Apakah SCRIPT_URL adalah REDIRECT_URL yang baru?
Edit 1
Memeriksa lagi REDIRECT_URL sudah (sekarang) diset, tetapi selalu ke 'index.php' (target mod_rewrite) alih-alih URL yang diketik yang diharapkan. Saya telah menggunakan PHP auto_prepend_file menggunakan untuk secara manual mengatur variabel yang diperlukan.
Saya tidak yakin bagaimana saya melewatkannya pada putaran pertama, tetapi saya telah membuat beberapa perubahan sementara itu jadi saya kira ada peluang di luar itu tidak ada. Permintaan maaf jika ini menyesatkan siapa pun.
Edit 2
Untuk mengatasi menyebutkan ErrorDocument di bawah ini, aturan mod_rewrite yang digunakan adalah:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
Variabel $ _GET ['url'] diset, jadi aturannya harus berfungsi.
Untuk menjadi jelas, pada tahap ini saya telah pergi dengan solusi auto_prepend_file yang saya sebutkan pada awalnya.