1

私はWAMPサーバーを使用しており、ほとんどがそのままの状態で構成されています。mod_rewrite をローカルで期待どおりに動作させるのに問題があります (本番サーバーではすべて正常に動作します)。

次の場所に PHP ファイルがあります。 /ajax/graphs/get-graph.php

このファイルは、通常、ロードされたブートストラップ ファイルを介して呼び出されます。 /index.php

ルートに .htaccess ファイルがあり、次のルールがあります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L]

したがって、基本的に、アプリが AJAX を介して要求する場合、アプリへの呼び出しは に送信/ajax/graphs/get-graph/する必要があります/index.php

問題は、Apache/mod_rewrite がリクエスト パスを認識して/ajax/graphs/get-graph.php直接ロードすることです。

/ajax/graphs/get-graph/同じ名前のphpファイルがその場所に存在するため、Apacheが有効なファイルであると想定しないようにするにはどうすればよいですか?

4

1 に答える 1

3

コンテンツ ネゴシエーションの罠に陥ったようです ;-) Apache のドキュメントMultiViewsで説明されているように、有効にすると Apache が基本的に存在しないディレクトリ名を対応するファイル名に変換するというオプションがあります。

MultiViews の効果は次のとおりです。サーバーが のリクエストを受信した場合、/some/dir/fooMultiViews/some/dirが有効になって/some/dir/fooいて存在しない場合、サーバーは という名前のファイルを探してディレクトリを読み取り、foo.*それらすべてのファイルを指定するタイプ マップを効果的に作成します。 ..

目的は、ファイルの複数のバージョンを異なる形式または言語で使用できるようにすることです。

/some/dir
- foo.en.gif
- foo.en.png
- foo.en.jpg
- foo.fr.gif
- foo.fr.png
- foo.fr.jpg

Apache は、ブラウザが提供する設定に基づいて最適なものを選択します。

それを修正するには、ディレクティブを追加するだけです

Options -MultiViews

に対応する<Directory>または<Location>ブロック内/ajax/graphs。または、メインのサーバー構成にアクセスできない場合は、/ajax/graphs/.htaccess.

于 2011-10-05T19:30:01.067 に答える