合并新的“mod_rewrite”规则并保留旧行为,有什么问题?

Merging new `mod_rewrite` rules and preserving old behaviour, what is wrong?

我在网站的根目录下使用 Apache2 和以下(好).htaccess

 #OLD (GOOD, IS WORKING!)
 # If requested url is an existing file or folder, don't touch it
 RewriteCond %{REQUEST_FILENAME} -d [OR]
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteRule . - [L]

 RewriteRule ^(urn|URN):(.+)$     index.php?urn= [L]
 RewriteRule ^([a-zA-Z\d\-]+)$    index.php?obj= [L]

现在我需要为文件夹 xWiki 合并一个新条件

#NEW: some conflicts, how to preserve old and add /xWiki* behaviour?
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^xWiki/?(.*)$ /xWiki/index.php?title= [L,QSA]

如何 "merge" 保留除 /xWiki 之外的旧行为?

仅添加 RewriteRule ^xWiki/?(.*)$ 无效,并且 !-f 与相同的 -f 条件冲突...

这样说:

 #OLD (GOOD, IS WORKING!)
 # If requested url is an existing file or folder, don't touch it
 RewriteCond %{REQUEST_FILENAME} -d [OR]
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteRule . - [L]

 RewriteRule ^xWiki/(.*)$ /xWiki/index.php?title= [L,QSA]

 RewriteRule ^(urn|URN):(.+)$     index.php?urn= [L,QSA]
 RewriteRule ^([a-zA-Z\d\-]+)$    index.php?obj= [L,QSA]

编辑:问题已得到解答,这就是解决方案!仅为将反对票更改为赞成票而编辑。

  • 主要问题是将 RewriteRule 放在正确的位置(在其他 RewriteRules 之前),并理解与 -f!-f 没有冲突(没有变化-f 是合并解决方案)。
  • 一个很好的优化是将正则表达式 ^xWiki/?(.*)$ 更改为 ^xWiki/(.*)$