私は以下の設定をしています。テスト設定による非常に簡単なURL書き換え設定Apache URLの書き換えが間違っている
// ----- test.php -----
<?php
phpinfo();
// ----- test.php -----
test.localの設定は以下のとおりです。
<VirtualHost *:80>
ServerName test
ServerAlias test.*
DocumentRoot /var/www/test
</VirtualHost>
<Directory "/var/www/test/">
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* test.php/$0 [R,NE]
</Directory>
今、私が要求GET http://test.local/my-path-info
私も働くパス情報にスラッシュを追加した場合、予想通りphpinfo()
ページが表示されたデフォルトを作る場合。しかし、URLにエンコードされたスラッシュ%2F
を追加すると(GET http://test.local/my-path-info%2fsomething-else
)、それは404 Not found
となります。基本的には、PHPファイルには到達しません。
なぜこれが起こっているのか、それを回避する方法はありますか?
設定はApache 2.2.13、Linux(Centos 5.x)のPHP 5.3.8です。
注:私がここでやろうとしているのは、パス情報コンポーネントの1つにスラッシュを追加して、MVCフレームワークのルータロジックによって解釈されないようにすることです。それをエンコーディングしなければ、ルータはパス区切りであるスラッシュとパスコンポーネントの一部であるスラッシュを区別できません。
これは助けることができる:http://stackoverflow.com/questions/3235219/urlencoded-forward-slash-is-breaking-url –
あなたはこのためにあなたのの体にあなたのディレクティブを望むことはないでしょうApacheのグローバルディレクティブにならない? –
Skittles
ありがとう@Skittlesあなたは絶対に正しいです。同時に、セットアップに固有の正しい設定です。 –