我的Apache上同時(shí)掛有SVN和rewrite module,SVN配置都沒有問題,通過HTTP訪問正常,但通過Toroisesvn客戶端訪問總是不行,錯(cuò)誤信息如下:
Error: PROPFIND request failed on ‘/svn/svntest’
Error: PROPFIND of ‘/svn/svntest’: 302 Found (http://www.domain.com)
經(jīng)查,如果我去掉Apache的httpd.conf中的這兩句,就可以正常使用了:
RewriteRule (.+)\/(\w+[^\/])$ $1/$2/ [R]
RewriteRule \/(\w+[^\/])$ /$1/ [R]
這兩句RewriteRule是為了添加URL地址末尾的斜杠的,看來這兩句對SVN的調(diào)用起了影響,原因大概是訪問SVN的地址,比如是“/svn/svntest”時(shí),RewriteRule會將其改寫為“/svn/svntest/”,多了一個(gè)斜杠,然后SVN就不知所綜了。
原來Apache 2.0的mod-dir已經(jīng)有了自動添加斜杠的功能:
A "trailing slash" redirect is issued when the server
receives a request for a URLhttp://servername/foo/dirname
wheredirname
is a directory. Directories require a
trailing slash, so mod_dir
issues a redirect tohttp://servername/foo/dirname/
.
不用勞煩RewriteRule了。
話又說回來,不管是mod_dir也好,RewriteRule也好,使用反向代理(ProxyPass)的時(shí)候還是有些問題,比如說,domain1.com/d2地址貝配置為轉(zhuǎn)向到domain2.com,那么訪問地址domain1.com/d2/subdir時(shí),如果subdir時(shí)確實(shí)存在的,而輸入地址的時(shí)候最后又沒有輸入斜杠/,那么你將會得到一個(gè)404錯(cuò)誤頁面,并且地址欄顯示的是domain1.com/subdir,這個(gè)問題遇到很久了,一直不知道如何解決。通過端口進(jìn)行反向代理好像同樣存在這樣的問題。
所以,使用反向代理時(shí),一是老老實(shí)實(shí)的加上斜杠,二就是最好盡量采用如下的反向代理方式:domain1.com/subdir1定向到domain2.com/subdir2,并且subdir1和subdir2同名,這樣就不會出現(xiàn)上面說到的問題了。