针对CardDAV短URL的Apache贝加尔服务器重写规则

针对CardDAV短URL的Apache贝加尔服务器重写规则,apache,mod-rewrite,Apache,Mod Rewrite,我正在使用贝加尔CalDAV和CardDAV服务器来同步我的联系人和日历。我所有的客户都很满意。对于iPhone和Mac suppoer,我甚至在我的Apache vHost文件中加入了/.众所周知的/重定向规则 联系人同步正在以下URL上工作: myurl/html/card.php/principals/(username) 我想为其他用户缩短此URL。我想我可以在Apache上使用mod_rewrite来完成它,但我无法让它工作 我想重写 myurl/(username) 到 它看起来

我正在使用贝加尔CalDAV和CardDAV服务器来同步我的联系人和日历。我所有的客户都很满意。对于iPhone和Mac suppoer,我甚至在我的Apache vHost文件中加入了
/.众所周知的/
重定向规则

联系人同步正在以下URL上工作:

myurl/html/card.php/principals/(username)
我想为其他用户缩短此URL。我想我可以在Apache上使用
mod_rewrite
来完成它,但我无法让它工作

我想重写

myurl/(username)

它看起来非常简单,但我最终大多使用递归重定向。我使用了下面的重写规则

RewriteRule ^(.*) /html/card.php/principals/$1

任何帮助都将不胜感激。

是的,这是一个重写循环错误

(.*)
匹配任何uri,包括目标uri,并将其重写回自身,从而导致无限循环错误

为了避免此错误,我们需要排除要重写的路径

RewriteCond %{REQUEST_URI} !^/html/card.php/principal/
RewriteRule (.*) /html/card.php/principal/$1

现在规则是有条件的,它将把/foo重写为/html/card.php/principal/foo它不会将/html/card.php/principal/foo重写为/html/card.php/principal/foo

成功了!非常感谢你的帮助。我读了很多关于RewriteRule的文档,但没有看到RewriteCond的用法。非常感谢。
RewriteCond %{REQUEST_URI} !^/html/card.php/principal/
RewriteRule (.*) /html/card.php/principal/$1