多くのサイトを古いサーバー構成から新しいサーバー構成に移行しているところです。各サイトは、mod_rewrite URLを使用して、類似した(ただし、残念ながら同一ではない)コードベースに基づいています。
ほとんどがチャームのように機能しますが、新しい構成では$ _SERVER ['REDIRECT_URL']が設定されなくなり、このグローバル変数に依存しているためにコードが失敗します。
私の理解では、この変数はリダイレクトが発生したときにApacheによって設定されます。明らかにこれは今は起こっていませんが、私は原因を見つけるのに苦労しています。
各サイトでコードを編集する必要はないので、必要に応じてグローバルPHP auto_prepend)を設定しますが、理想的にはサーバー構成を修正してこれを使用しますそもそも設定。
関連する可能性がある:REDIRECT_SCRIPT_URLとREDIRECT_REDIRECT_SCRIPT_URLという2つの新しい$ _SERVER変数もあります。これらには、REDIRECT_URLに必要な正しいデータがあるようですが、以前にはなかった2つの内部リダイレクトが発生していることも示しているようです。GoogleがREDIRECT_REDIRECT_SCRIPT_URLを検索すると、ランダムなvar_dump出力のみが返されます。 SCRIPT_URLは新しいREDIRECT_URLですか?
再度チェックすると、REDIRECT_URLは(現在)設定されていますが、予期された型付きURLではなく、常に 'index.php'(mod_rewriteターゲット)に設定されています。 PHP auto_prepend_fileを使用して、必要な変数を手動で設定しました。
最初のラウンドでどのように見逃したのかはわかりませんが、その間にいくつかの変更を加えたので、そこになかった可能性は外部にあると思います。これが誰かを誤解させるならば、謝罪。
以下のErrorDocumentの言及に対処するために、使用されているmod_rewriteルールは次のとおりです。
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
$ _GET ['url']変数が設定されているため、ルールが機能している必要があります。
明確にするために、この段階では、最初に述べたauto_prepend_fileの回避策を実行しました。
REDIRECT_URLは、Apache Webサーバーによってのみ設定され、 特定の状況でのみ 。それはおそらくあなたのコードが頼るべきものではありません。私の知る限り、最善の解決策はバグのあるPHPコードを修正することです。これを、Apacheで常に設定するように強制することはできません。
PHPのドキュメントによると:
$ _SERVERは、ヘッダー、パス、スクリプトの場所などの情報を含む配列です。この配列のエントリは、Webサーバーによって作成されます。すべてのWebサーバーがこれらのいずれかを提供するという保証はありません。サーバーは一部を省略したり、ここに記載されていないその他のものを提供したりする場合があります。とは言うものの、これらの変数の多くは "CGI/1.1仕様 で説明されているので、それらを期待できるはずです。
したがって、すべてではないように思われます$_SERVER
スーパーグローバル変数は、予想どおりプラットフォームに依存しません。 $_SERVER['REQUEST_URI']
は、すべての主要なWebサーバーによって一貫して定義されているそのような値の1つであるように思われるため、代わりにそれを使用してみてください。
Index.phpにリダイレクトされたプロジェクトの1つで欠落している画像については、次の修正を使用しました。
<?php
//image.php (newly created)
$_SERVER['REDIRECT_URL'] = "image.php";
include "index.php";
グローバルソリューションが必要な場合は、explode()などを使用し、$ _ SERVER ['REQUEST_URI']などの別の変数を使用する必要があると思います。