2012-07-29 43 views
0

這就是我想要做的:任何在一臺機器上不能解析的URI都會通過反向代理碰到另一臺機器。配置是這樣的:Apache mod_rewrite RewriteCond -U標誌誤報

RewriteEngine On 
RewriteCond %{REQUEST_URI} !-U 
RewriteRule ^/(.*)$ http://other.site/$1 [P,NS] 

現在,什麼是應該說的是:「如果我無法通過運行一個子請求找到任何地方,它撐船到代理。」

唯一的問題是,它不這樣做。隨着RewriteLogLevel千斤頂,我得到這個:

31.3.3.7 - - [29/Jul/2012:00:26:18 --0700] [internet.srs.bznz/sid#7fc6099fa228][rid#7fc609bf2bf0/initial] (5) RewriteCond URI (-U) check: path=/ -> status=200 
31.3.3.7 - - [29/Jul/2012:00:26:18 --0700] [internet.srs.bznz/sid#7fc6099fa228][rid#7fc609bf2bf0/initial] (4) RewriteCond: input='/' pattern='!-U' => not-matched 

該機器/上沒有什麼。它應該返回403.所以我的問題是:地獄是從哪裏來的?這是一款全新的Debian VPS,因此它不像配置中有任何污染。我在其他地方(Ubuntu 12.04)嘗試了同樣的事情,並且做了同樣的事情。

如何找出導致錯誤成功代碼的原因?

回答

4

同樣的問題。此外,我通過添加

RewriteCond %{IS_SUBREQ} =false

作爲第一測試條件增強配置。我認爲這將是無止境的遞歸。

但我的經驗是,任何現有或不存在的URI評估爲OK(200)。我不知道爲什麼,但它可能只測試該URI的服務器配置 - 是否允許或拒絕路徑被類似Deny from allRewriteRule [F]

+0

** [apache文檔](http://httpd.apache.org/ docs/current/mod/mod_rewrite.html#rewritecond):檢查_TestString_是否是一個有效的URL,可通過該路徑的所有服務器當前配置的訪問控制訪問**。因此,它只檢查配置的訪問權限,而不是一致性或文件系統權限... – motas 2012-11-08 16:55:39