我想通過一個腳本(web-root中的index.php
)處理所有傳入請求。mod_rewrite中的Apache和反斜槓
所以,以下就是目前發生的情況:http://localhost/foo/bar/baz
是Apache(通過.htaccess
)發送到:http://localhost/index.php?url=foo/bar/baz
然而,這工作得很好,在Firefox中我能夠做到這一點:http://localhost/foo\
- >注意反斜槓。
和Apache的,而不是做:/index.php?url=foo\
發出一個通用的錯誤頁面,指出:找不到
對象!在此服務器上找不到請求的網址 。如果您手動輸入網址 ,請檢查您的拼寫 ,然後重試。
如果您認爲這是服務器錯誤,請與網站管理員聯繫 。
錯誤404本地主機的Apache/2.2.14 的(Win32)DAV/2的mod_ssl/2.2.14 的OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 的mod_perl/2.0 .4 Perl/v5.10.1
直接轉到:http://localhost/index.php?url=foo\
但是沒有問題。
所有的網站似乎能夠很好地處理反斜槓(例如,http://stackoverflow.com/tags/php\\\\\
)。
我認爲這種行爲是一個錯誤,我想強制Apache正確地轉發反斜槓。 這是我.htaccess
文件中的全部:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L]
我怎樣才能使這項工作正常?
編輯:我剛剛在我的網絡主機上試過這個,這個問題由他們正確處理。讓我覺得這是httpd.conf
中的一些設置。
可能的錯誤:https://issues.apache.org/bugzilla/show_bug.cgi?id=42499,也儘量添加到您的htaccess'AllowEncodedSlashes On' – RobertPitt
@RobertPitt:謝謝,我不知道'AllowEncodedSlashes '。但是,將它添加到我的'.htaccess'文件時,服務器ISE(HTTP 500)。這發生在我的本地開發框(Windows)以及我的網絡主機(Linux)上。看看它的Apache文檔,它的上下文似乎被列爲:'服務器配置,虛擬主機',所以不支持'.htaccess'? – NuCalTone