我怎样才能说服mod_rewrite远离我的Subversion存储库?

时间:2010-01-21 07:14:58

标签: svn apache wordpress .htaccess mod-rewrite

我有一个[在Dr​​eamHost上托管]的网站,使用WordPress作为主要内容,但使用http://mysite/svn中的Subversion存储库。

我的文件布局是:

webroot/
  blog   # wordrpress files
  .htaccess

我的SVN存储库位于Web根目录之外,但它们已正确映射到/ svn / repository URL。

当我在我的.htaccess文件中放置WordPress永久链接重写规则时,博客页面和固定链接工作得很好,但它打破了Subversion。

这是我的.htaccess文件,删除了所有内容:

RewriteEngine On
RewriteBase /

# try 1                                                                                       
#RewriteCond %{REQUEST_URI} svn [NC]                                                          
#RewriteRule . - [PT,L]                                                                       

# try 2                                                                                       
#RewriteRule ^svn.*  -  [PT,L]                                                                

# try 3
#RewriteCond %{REQUEST_URI} !^svn 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . blog/index.php [L]

最后一行打破了Subversion。客户端错误是这样的:

$ svn ls https://mysite/svn/myrepo/
svn: PROPFIND request failed on '/svn'
svn: PROPFIND of '/svn': 405 Method Not Allowed (https://mysite)

如果我注释掉最后一行,RewriteRule . blog/index.php,Subversion会起作用。但让WordPress处理好的固定链接的东西不会。

我尝试了三个“忽略以'svn'开头的任何网址”我上面已经注释过的方法,没有一个工作 - 他们似乎没有做任何事情。有或没有PT传递标志。

我用google搜索了一下,似乎其他人已经被mod_rewrite和WebDAV(Subversion使用)踩到了彼此。我找到了an extremely similar abandoned SO question here too,但没有找到合适的解决方案。有线索吗?

5 个答案:

答案 0 :(得分:4)

怎么样

RewriteCond %{REQUEST_URI} !^/svn.*

答案 1 :(得分:4)

我认为你应该致电Dreamhost的支持。我有一些网站,并且总是得到很好的支持。

无论如何,this solution怎么办?

SVN存储库(SVNRepo)

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} SVNRepo
RewriteRule . - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

答案 2 :(得分:2)

您是否考虑过将Subversion存储库移动到其他子域?例如,http://svn.mysite.com/

这将是一个简单的出路。

我花了很多时间把头发拉过mod_rewrite ......任何时候你可以避免这种情况,这是一场胜利。

答案 3 :(得分:0)

尝试#3看起来不错,你试过那里:

RewriteCond %{REQUEST_URI} !^svn.*

答案 4 :(得分:0)

尝试

RewriteCond %{REQUEST_FILENAME} !(.*)svn(.*)