У меня есть настройка ниже; очень простая настройка перезаписи URL-адресов с установочной установкойURL-адрес Apache Rewriting misbehaving
// ----- 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()
страница, как и ожидалось, если добавить косую черту в информации пути, который работает тоже. Но если я добавлю кодовую косую черту %2F
в URL-адрес (пример GET http://test.local/my-path-info%2fsomething-else
), она появится как 404 Not found
. В принципе, он не попадает в файл php.
Любая идея, почему это происходит, и как обойти ее?
Настройка на Apache 2.2.13, PHP 5.3.8 на Linux (Centos 5.x).
ПРИМЕЧАНИЕ. То, что я пытаюсь сделать, это добавить косую черту в один из компонентов информации о пути, чтобы он не интерпретировался логикой маршрутизатора в рамках MVC. Без кодирования маршрутизатор не может различать косой чертой, которая является разделителем путей, и той, которая является частью компонента пути.
Это может помочь: http://stackoverflow.com/questions/3235219/urlencoded-forward-slash-is-breaking-url –
Вы бы не быть желания ваших директив в вашем тела для этого не стать глобальной директивой Apache? –
Skittles
Спасибо @Skittles, что вы абсолютно правы; но в то же время это правильная конфигурация, характерная для моей настройки. –