.htaccess 合并新的'mod_rewrite'规则并保留旧的行为,错在哪里?

jpfvwuh4  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(169)

我使用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=$2 [L]
 RewriteRule ^([a-zA-Z\d\-]+)$    index.php?obj=$1 [L]

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

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

如何“合并”除/xWiki之外的保留旧行为?

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

vqlkdk9b

vqlkdk9b1#

有这样的说法:

#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=$1 [L,QSA]

 RewriteRule ^(urn|URN):(.+)$     index.php?urn=$2 [L,QSA]
 RewriteRule ^([a-zA-Z\d\-]+)$    index.php?obj=$1 [L,QSA]
  • 主要问题是将RewriteRule放置在正确的位置(在其它重写规则之前),并且理解-f!-f没有冲突(-f中没有改变是合并解决方案)。
  • 一个好优化是将正则表达式^xWiki/?(.*)$更改为^xWiki/(.*)$

相关问题