我的Apache上同時(shí)掛有SVN和rewrite module,SVN配置都沒(méi)有問(wèn)題,通過(guò)HTTP訪(fǎng)問(wèn)正常,但通過(guò)Toroisesvn客戶(hù)端訪(fǎng)問(wèn)總是不行,錯誤信息如下:
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地址末尾的斜杠的,看來(lái)這兩句對SVN的調用起了影響,原因大概是訪(fǎng)問(wèn)SVN的地址,比如是“/svn/svntest”時(shí),RewriteRule會(huì )將其改寫(xiě)為“/svn/svntest/”,多了一個(gè)斜杠,然后SVN就不知所綜了。
原來(lái)Apache 2.0的mod-dir已經(jīng)有了自動(dò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了。
話(huà)又說(shuō)回來(lái),不管是mod_dir也好,RewriteRule也好,使用反向代理(ProxyPass)的時(shí)候還是有些問(wèn)題,比如說(shuō),domain1.com/d2地址貝配置為轉向到domain2.com,那么訪(fǎng)問(wèn)地址domain1.com/d2/subdir時(shí),如果subdir時(shí)確實(shí)存在的,而輸入地址的時(shí)候最后又沒(méi)有輸入斜杠/,那么你將會(huì )得到一個(gè)404錯誤頁(yè)面,并且地址欄顯示的是domain1.com/subdir,這個(gè)問(wèn)題遇到很久了,一直不知道如何解決。通過(guò)端口進(jìn)行反向代理好像同樣存在這樣的問(wèn)題。
所以,使用反向代理時(shí),一是老老實(shí)實(shí)的加上斜杠,二就是最好盡量采用如下的反向代理方式:domain1.com/subdir1定向到domain2.com/subdir2,并且subdir1和subdir2同名,這樣就不會(huì )出現上面說(shuō)到的問(wèn)題了。
聯(lián)系客服