0
我在Apache中遇到了一些非常奇怪的行爲。我有一個標準的「讓PHP處理所有不是文件或目錄」重寫設置。。當url包含編碼的正斜槓時忽略.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
這將按預期除了當URL包含%2F
,它是編碼的正斜槓(/)。只要發生這種情況,Apache會以404響應,這是合乎邏輯的,因爲這些路徑都不存在。但是我不明白的是爲什麼我的.htaccess
中的重寫規則被忽略。
TL; DR
GET /Foo/bar/baz
是我的PHP腳本
GET /Foo/bar%2Fbaz
送達被Apache服務。
這看起來像一個糟糕的默認行爲。在URI模式中將'%2F'與'/'區分開來是有意義的,這種保留字符將用於替代特殊用途。這將是例外而不是規則,並且當這樣的方案發生在應用程序中時,該用法將可能在URL的查詢部分之後,使用'?'字符。 – Kaz 2012-03-12 16:03:21