我有以下設置;一個非常簡單的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。
注意:我在這裏要做的是將正斜槓添加到其中一個路徑信息組件中,這樣它就不會被MVC框架中的路由器邏輯解釋。如果不對其進行編碼,則路由器不能區分作爲路徑分隔符的斜槓和作爲路徑組件的一部分的斜槓。
這可以幫助:http://stackoverflow.com/questions/3235219/urlencoded-forward-slash-is-breaking-url – 2012-01-27 15:14:48
難道你想被你指令在你的身體這不成爲Apache全球指令? –
Skittles
2012-01-29 03:16:18
謝謝@Skittles你是絕對正確的;但同時它是正確的配置,特定於我的設置。 – 2012-01-31 15:59:54