質問: multiviewsを使用した言語のapacheコンテンツネゴシエーションの構成 apacheでmultiviewsオプションを機能させて、リクエストで提供されたaccept-languageに基づいてブラウザに返されるコンテンツを変更しようとしています。私は次の構成を持っています:alias /multiviewstest "c:/multiviews test" <directory "c:/multiviews test"> options multiviews allowoverride none order allow,deny allow from all </directory> 私のc:\multiviews testディレクトリには、次のファイルがあります。 spam.html foo.html.en http://localhost/multiviewstest/spamをリクエストすると、spam.htmlの内容が返されます。リクエストとレスポンスのヘッダーは次のとおりです。host: localhost user-agent: mozilla/5.0 (windows; u; windows nt 6.0; en-us; rv:1.9.0.10) gecko/2009042316 firefox/3.0.10 (.net clr 3.5.30729) accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-language: en accept-encoding: gzip,deflate accept-charset: iso-8859-1,utf-8;q=0.7,*;q=0.7 keep-alive: 300 connection: keep-alive pragma: no-cache cache-control: no-cache date: fri, 08 may 2009 11:07:54 gmt server: apache/2.2.10 (win32) content-location: spam.html vary: negotiate tcn: choice last-modified: fri, 08 may 2009 10:48:34 gmt etag: "0-4-469645ec81e70;469645ff5a5d8" accept-ranges: bytes content-length: 4 keep-alive: timeout=5, max=100 connection: keep-alive content-type: text/html content-location、vary、およびtcn応答ヘッダーは、multiviewsが正しく開始されたことを示します。ブラウザに言語を表示するための唯一の優先言語として英語を設定しました。リクエストにはaccept-language enヘッダーが設定されます。 http://localhost/multiviewstest/foo.htmlをリクエストすると、404応答が返されます。言語ネゴシエーションのための apacheのファイル命名規則 の理解に基づいて、foo.html.enファイルの内容が返されることを期待しています。リクエストとレスポンスのヘッダーは次のとおりです。host: localhost user-agent: mozilla/5.0 (windows; u; windows nt 6.0; en-us; rv:1.9.0.10) gecko/2009042316 firefox/3.0.10 (.net clr 3.5.30729) accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-language: en accept-encoding: gzip,deflate accept-charset: iso-8859-1,utf-8;q=0.7,*;q=0.7 keep-alive: 300 connection: keep-alive pragma: no-cache cache-control: no-cache date: fri, 08 may 2009 11:08:39 gmt server: apache/2.2.10 (win32) content-length: 221 keep-alive: timeout=5, max=100 connection: keep-alive content-type: text/html; charset=iso-8859-1 リクエストのアクセスログに表示される内容は次のとおりです。127.0.0.1 - - [04/may/2009:10:28:24 +1200] "get /multiviewstest/foo.html http/1.1" 404 221 そしてエラーログから:[mon may 04 10:28:24 2009] [error] [client 127.0.0.1] negotiation: discovered file(s) matching request: c:/multiviews test/foo.html (none could be negotiated). 言語のコンテントネゴシエーションが正しく開始されないのはなぜですか?見落としている設定はありますか?
回答: fwiw、適切なaddlanguageなどのディレクティブを使用して、同様の問題が発生しました。やがて、問題はphp固有のものであることに気づきました。何らかの理由で、filesmatchディレクティブ内でsethandlerを使用していました。<filesmatch \.php$> sethandler application/x-httpd-php </filesmatch> 単純なaddtypeに切り替えると、問題が解決しました。addtype application/x-httpd-php .php