現在、多くのサイトを古いサーバー構成から新しいサーバー構成に移行しています。各サイトは、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)
ほとんどはチャームのように機能しますが、新しい構成では$ _SERVER ['REDIRECT_URL']が設定されなくなり、このグローバル変数への依存が原因でコードが失敗します。
私の理解では、この変数はリダイレクトが発生したときにApacheによって設定されます。明らかにこれは現在起こっていませんが、原因を見つけるのに苦労しています。
- それはApacheのアップグレードですか、(私の推測では)PHP FastCGIからPHP5-FPMへの切り替えですか?
- この変数を元に戻すにはどうすればよいですか?
各サイトのコードを編集する必要はないので、必要に応じてグローバルなPHP auto_prependを設定しますが、理想的にはサーバー構成を修正し、これを最初に設定したいと思います。
潜在的に関連:私は今、いくつかの新しい$ _SERVER変数、つまりREDIRECT_SCRIPT_URLとREDIRECT_REDIRECT_SCRIPT_URLも持っています。これらはREDIRECT_URLに必要な正しいデータを持っているようですが、以前にはなかった2つの内部リダイレクトが発生していることも示しているようです-REDIRECT_REDIRECT_SCRIPT_URLを検索すると、ランダムなvar_dump出力しか返されません。SCRIPT_URLは新しいREDIRECT_URLですか?
編集1
再チェックREDIRECT_URLは(現在)設定されていますが、予想される型付きURLではなく、常に 'index.php'(mod_rewriteターゲット)に設定されています。PHP auto_prepend_fileを使用して、必要な変数を手動で設定しました。
初めて見逃したかどうかはわかりませんが、その間にいくつかの変更を加えたので、そこにない可能性が外部にあると思います。これが誰かを誤解させるならば、謝罪してください。
編集2
以下のErrorDocumentの言及に対処するために、使用されているmod_rewriteルールは次のとおりです。
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
$ _GET ['url']変数が設定されているため、ルールが機能している必要があります。
明確にするために、この段階では、最初に述べたauto_prepend_fileの回避策を使用しました。