2011-01-17 10 views
1

すべての着信要求を1つのスクリプト(web-rootのindex.php)で処理したい。mod_rewriteのApacheとバックスラッシュ

ので、次は現在、何が起こるかです:http://localhost/foo/bar/baz

がに(.htaccess経由)のApacheによってルーティングさ:これはうまく機能http://localhost/index.php?url=foo/bar/baz


、しかし、Firefoxで私はこれを行うことができますよ:http://localhost/foo\ - >バックスラッシュに注目してください。

とApache、代わりに行うので:

オブジェクトが見つかりません:/index.php?url=foo\

は、一般的なエラーページのことわざを発行します!要求されたURL がこのサーバー上に見つかりませんでした。 を手動で入力した場合は、 のスペルを確認してもう一度お試しください。

これがサーバーエラーと思われる場合は、 ウェブマスターにお問い合わせください。

エラー404ローカルホストのApache/2.2.14 (Win32の)DAV/2のmod_ssl/2.2.14 のOpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 のmod_perl/2.0 .4 Perl/v5.10.1

直接に行く:http://localhost/index.php?url=foo\は問題なく動作します。私は、インターネット上で見てきた


すべてのサイトが優雅にバックスラッシュを扱うことができるように思われる(例えば、http://stackoverflow.com/tags/php\\\\\)。

私はこの動作をバグと見なし、Apacheにバックスラッシュを正しく転送させたいと考えています。私は適切にこの作業を行うことができますどのように

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [L] 

: は、ここにその全体が私の.htaccessファイルですか?


編集:私はウェブホストでこれを試しましたが、これは正しく処理されています。私はそれがhttpd.confのいくつかの設定だと思うようになります。

+0

可能なバグ:https://issues.apache.org/bugzilla/show_bug.cgi?id=42499また、あなたのhtaccessに追加しようとしました 'AllowEncodedSlashes On' – RobertPitt

+0

@RobertPitt:ありがとう、私は' AllowEncodedSlashes '。それを私の '.htaccess'ファイルに追加すると、サーバISE(HTTP 500)になります。これはローカル開発ボックス(Windows)とWebホスト(Linux)で発生します。 Apacheのドキュメントを見ると、 'server config、virtual host'のようにそのコンテキストがリストされているようですので、' .htaccess'をサポートしていませんか? – NuCalTone

答えて

0

許容スラッシュとして許容されないものを取得しないようにするには、おそらくAcceptPathInfoをオフにする必要があります。

0

WindowsのWampServerでこの問題が発生したばかりです。

<VirtualHost *:80> 
    AllowEncodedSlashes On 
</VirtualHost> 

それは.htaccessファイルでは動作しません:AllowEncodedSlashesオプションRobertPittが正しいものである上記言及し、それはのVirtualHostブロック内で、http.confファイルに行かなければならない、などということ - This pageは解決策を持っていました。

関連する問題