2012-01-27 4 views
0

私は以下の設定をしています。テスト設定による非常に簡単な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フレームワークのルータロジックによって解釈されないようにすることです。それをエンコーディングしなければ、ルータはパス区切りであるスラッシュとパスコンポーネントの一部であるスラッシュを区別できません。

+2

これは助けることができる:http://stackoverflow.com/questions/3235219/urlencoded-forward-slash-is-breaking-url –

+0

あなたはこのためにあなたのの体にあなたのディレクティブを望むことはないでしょうApacheのグローバルディレクティブにならない? – Skittles

+0

ありがとう@Skittlesあなたは絶対に正しいです。同時に、セットアップに固有の正しい設定です。 –

答えて

0

AllowEncodedSlashesのオプションとしてNoDecodeをサポートしないApacheバージョンのため、以下の組み合わせを使用して終了しました。私はまた、リクエストURIをurl-encodeしなければなりませんでした。理想的ではありませんが、私のために今のところ働きます。

<VirtualHost *:80> 
     ServerName test 
     ServerAlias test.* 
     DocumentRoot /var/www/test 
     AllowEncodedSlashes On 
</VirtualHost> 

<Directory "/var/www/test/"> 
     RewriteEngine On 
     RewriteBase/
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 

     # Option B below was the key! 
     RewriteRule .* test.php/$0 [R,NE,B] 
</Directory> 
関連する問題