2011-12-09 43 views
1

context/path/file/anything/that/followsなどのすべてのURLがcontext/path/file.php/anything/that/followsまたはcontext/path/file.xml/anything/that/followsになるこの問題があります。ApacheがFILE + SLASHのURLを書き換えないように設定する

私は、次の書き換えルールがあります。

service.phpservice/...で始まるURLをマップする必要があります
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^service/(.*)$ service.php?xyz=1 [L,QSA] 

を。さて、問題は、service.xmlという名前のXMLファイルが.htaccessと同じフォルダにある場合、URLは代わりにそのファイルにマッピングされることです。 PHPファイルが存在する場合、PHPファイルに移動します。 XMLファイルが優先されます。つまり、ディレクトリにXMLファイルと名前がservice.*のPHPファイルがある場合、XMLファイルが選択されます。

私はMac OS X 10.7(Lion)上でPHP 5.3、Apache 2.xを使用しています。この問題は、以前はOS X 10.6を使用していたときに発生していなかったため、Appleが提供する設定にいくつか変更が必要です。私は何が分かりません。

これを無効にする方法はありますか?functoinality

私は完全にオフトラックですか、何かばかげたドンギングですか?

ところで、これはmod_rewriteには関係ありません。有効にするか無効にするか、.htaccessから書き換えルールを削除すると何かが変更されます。 URL service/my/parameterは、mod_rewriteが無効になっていても、依然としてservice.xml/my/parameterを指しています。

今のところ、URLからクエリ文字列を取り出し、PHPファイル内で手動で解析しました。しかし、私はそれがこれを行う正しい方法ではないことを知っています。

答えて

3

これはMultiViewsオプションが有効になっているようです。

Options -MultiViews<Directory>セクション(または.htaccess)に追加してください。

+0

それは確かにそれでした。大いに感謝する。私は 'MultiViews'オプションについて知らなかった。 –

+0

はい。かなり迷惑なものです。あなたがコンテンツのネゴシエーションを必要としない場合は、mod_negociate – regilero

+0

を削除することもできます。私はそこに置くか、すでに存在しているかどうかはわかりません: "Options Indexes MultiViews"。私はMultiViewsという言葉を削除し、それを修正しました。本当にありがとう ! – Jake

関連する問題