合并新的“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/(.*)$
。
我在网站的根目录下使用 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/(.*)$
。