apache的高级重写规则

时间:2012-05-31 16:02:44

标签: apache mod-rewrite websvn

我通过互联网搜索但发现没有匹配的问题或帖子。我花了很多时间试图让它上班失败。我真的很感激,如果有人可以提供帮助,并指出让这个高级mod_rewrite工作。 (您可能希望直接跳到下面的问题。)

环境: 我在Apache 2.x上安装了带有MultiView功能的websvn最新版本,该功能可以生成以下格式的URL而无需任何重写规则:

https://svnweb.hostname.com/wsvn/Group.Repname/path/to/files/and/folders/in/svn/

这里的“Group”只是SVNParentPath,“Repname”是实际的SVN存储库。请注意“。”在Group和Repname之间。

我配置了SVN 1.7 + Apache 2,以下是URL格式:

https://svn.hostname.com/Group/Repname/path/to/files/and/folders/in/svn/

此问题与此SVN URL无关。要限制和管理用户对SVN存储库的访问,我已为每个Repname配置了LDAP auth和基于LDAP组的访问权限。这个配置是在我创建的脚本的帮助下自动完成的。

要求/问题: 我希望在URL中将 /wsn/Group.Repname / 转换为 / Group / Repname / ,其中WEBSVN正在使用MultiView apache功能构建其URL。

如果仔细观察,“Group”和“Repname”不是WEBSVN URL中的单独文件夹,与存储库的SVN URL路径不匹配。我想使用相同的svn.hostname.com LDAP auth和基于LDAP组的权限,用于svnweb.hostname.com的每个Repname。为了使其工作,svnweb URL必须与SVN服务器URL匹配,如

此:     https://svnweb.hostname.com/组/ Repname /路径/到/文件/和/文件夹/中/ SVN /

而不是     https://svnweb.hostname.com/ WSVN / Group.Repname /路径/到/文件/和/文件夹/中/ SVN /

可能的解决方案和限制: 要实现/解决此问题,我不想修改Web应用程序或在路径中创建支持“Group.Repname”的新apache LDAP auth和LDAP组配置。想象一下超过500多个SVN存储库和维护开销。我认为mod_rewrite可以帮助我实现重写的URL并保护WEBSVN,确保人们可以访问他们应该访问的内容。

我尝试了几个重写选项,但我无法将 /wsn/Group.Repname / 转换为 / Group / Repname / 。如果您知道如何使用重写可以实现这一点,请告诉我。感谢您的阅读,感谢您的意见和建议。

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

RewriteEngine On
RewriteBase /
RewriteRule ^wsvn/([^./]+)\.(.+)$ https://svnweb.hostname.com/$1/$2 [L,NC]

[^./]+表示“多于一个符号,但不是一个点或斜线”,.+表示“多个符号”。如果重定向应该是永久性的,您可能希望在R=301之后添加NC

答案 1 :(得分:0)

试试这条规则?

RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^wsvn(\.php)?/(.*?)\.(.*) $2/$3 [L,NC,QSA]

您是否也想更改域名?从你的问题我不明白。

**编辑**:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/wsvn
RewriteRule ^(.*)/(.*)$ wsvn.php/$1.$2 [L]