![如何在 Apache 中为虚拟主机编写重写规则?](https://linux22.com/image/1378552/%E5%A6%82%E4%BD%95%E5%9C%A8%20Apache%20%E4%B8%AD%E4%B8%BA%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%BC%96%E5%86%99%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99%EF%BC%9F.png)
我有一个运行良好的 Subversion 服务器;但是,我购买的工具要求项目有一个“branches”子目录,并且区分大小写。整个存储库中已经有带有“Branches”文件夹的项目,因此我尝试在 httpd.conf 文件中写入重写。我取消了 LoadModule 的注释并打开了 RewriteEngine,Apache 启动了,但我没有得到我想要的结果。
RewriteRule ^/Root/(.+)/branches(.*) /Root/$1/Branches$2
如果我使用 RedirectMatch,它可以在浏览器中运行,但在工具中仍然不起作用。
RedirectMatch ^/Root/(.+)/branches(.*) /Root/$1/Branches$2
我理解 Rewrite 通常用于重写文件或物理位置,但我在尝试解决我的问题时也见过类似的例子。我愿意尝试其他方法,我研究过 < If >,但它超出了我的能力范围。
答案1
终于明白了
RewriteRule ^/Root/(.+)/branches(.*) http://svn/Root/$1/Branches$2 [P]
由于它是虚拟的,因此我需要包含绝对网址。如果没有 [P] 标志(代理),它会返回 302 重定向,而如果带有标志,则仅限服务器处理请求并且客户端只是从单个请求中返回正确的页面。