2011-01-17 49 views
1

我想通過一個腳本(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中的一些設置。

+0

可能的錯誤:https://issues.apache.org/bugzilla/show_bug.cgi?id=42499,也儘量添加到您的htaccess'AllowEncodedSlashes On' – RobertPitt

+0

@RobertPitt:謝謝,我不知道'AllowEncodedSlashes '。但是,將它添加到我的'.htaccess'文件時,服務器ISE(HTTP 500)。這發生在我的本地開發框(Windows)以及我的網絡主機(Linux)上。看看它的Apache文檔,它的上下文似乎被列爲:'服務器配置,虛擬主機',所以不支持'.htaccess'? – NuCalTone

回答

0

可能需要將AcceptPathInfo關閉才能獲得容忍的正斜槓。

0

我只是在Windows上的WampServer上遇到這個問題。 This page有解決方案 - 即RobertPitt上面提到的是一個正確的選擇AllowEncodedSlashes,但必須在http.conf文件去,一個虛擬主機塊內,如:

<VirtualHost *:80> 
    AllowEncodedSlashes On 
</VirtualHost> 

它不會在一個.htaccess文件工作。