1

index.php( web-rootの)単一のスクリプトを介してすべての着信要求を処理したい。

したがって、現在行われていることは次のとおりです。http://localhost/foo/bar/baz

Apacheによって(を介して.htaccess)次の場所にルーティングされます。http://localhost/index.php?url=foo/bar/baz


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

そして、Apacheは、次のことを行う代わりに:/index.php?url=foo\

次のような一般的なエラーページを表示します。

オブジェクトが見つかりません!要求されたURLはこのサーバーで見つかりませんでした。URLを手動で入力した場合は、スペルを確認して再試行してください。

これがサーバーエラーであると思われる場合は、ウェブマスターに連絡してください。

エラー404localhostApache / 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にバックスラッシュを正しく転送させたいと考えています。これが私の.htaccessファイル全体です:

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

どうすればこれを正しく機能させることができますか?


編集:私はちょうど私のウェブホストでこれを試しました、そしてこれは彼らによって適切に処理されます。の設定だと思わせてくれますhttpd.conf

4

2 に答える 2

0

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

于 2011-01-19T01:12:55.370 に答える
0

WindowsのWampServerでこの問題が発生していました。このページには解決策がありAllowEncodedSlashesました-RobertPittが上で言及したオプションは正しいものですがhttp.conf、VirtualHostブロック内のファイルに入れる必要があります。

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

ファイルでは機能しません.htaccess

于 2012-07-10T12:34:53.720 に答える