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.
sumber
Jawaban:
REDIRECT_URL ditetapkan hanya oleh server web Apache, dan hanya dalam keadaan tertentu . Ini mungkin bukan sesuatu yang harus diandalkan oleh kode Anda. Sejauh yang saya tahu, solusi terbaik adalah memperbaiki kode PHP buggy; Anda tidak dapat benar-benar memaksakan ini untuk selalu ditetapkan di Apache.
sumber
Menurut dokumentasi PHP:
Jadi sepertinya tidak semua
$_SERVER
variabel superglobal adalah platform-agnostik seperti yang diharapkan.$_SERVER['REQUEST_URI']
tampaknya menjadi salah satu nilai yang secara konsisten ditentukan oleh semua webservers utama sehingga Anda mungkin ingin mencoba menggunakannya.sumber
Untuk gambar yang hilang di salah satu proyek kami yang mana diarahkan ke index.php saya baru saja menggunakan perbaikan ini:
url: http://www.domanXY.de/image.php?file=var/binaries/store/8dfaadde-5309-4a35-8f9a-d8b9cd807aae.jpg&options=&options=resize_outer(320,150);sharpen(64) ;
Jika Anda menginginkan solusi global, saya pikir Anda harus menggunakan explode () dll dan menggunakan Variabel lain yang diberikan seperti $ _SERVER ['REQUEST_URI'].
sumber
Anda dapat mengatur file php otomatis-prepend untuk menyertakan potongan kecil kode PHP yang mengatur variabel ini.
sumber