.htaccess mod_rewrite Simplify rules:我可以将多个规则简化为一个规则吗?
我可以将这两条规则(如果它们工作正常)合并为一条规则吗.htaccess mod_rewrite Simplify rules:我可以将多个规则简化为一个规则吗?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我可以将这两条规则(如果它们工作正常)合并为一条规则吗 RewriteRule ^service/?$ service.php [NC] RewriteRule ^service/([^/]+)/?$ service.php?id=$1 [NC] 我能把这4条规则简化为一条吗 RewriteRule ^hilfe/([^/]+)/([^/]+)/([^/]+)/?$ help/help.php?content=$1_$2_$3 [L,NC]
RewriteRule ^service/?$ service.php [NC]
RewriteRule ^service/([^/]+)/?$ service.php?id=$1 [NC]
我能把这4条规则简化为一条吗
RewriteRule ^hilfe/([^/]+)/([^/]+)/([^/]+)/?$ help/help.php?content=$1_$2_$3 [L,NC]
RewriteRule ^hilfe/([^/]+)/([^/]+)/?$ help/help.php?content=$1_$2 [L,NC]
RewriteRule ^hilfe/([^/]+)/?$ help/help.php?content=$1 [L,NC]
RewriteRule ^hilfe/?$ help/help.php [L,NC]
多谢各位 您可以将这些规则合并为一个,尽管这是否是“简化”是另一回事,因为单个规则更复杂
比如说,
可以表示为:
RewriteRule ^service/?(?:([^/]+)/?)?$ service.php?id=$1 [NC]
RewriteRule ^hilfe(?:/?([^/]+)(?:/?([^/]+)(?:/?([^/]+)/?)?)?)?$ help/help.php?content=$1_$2_$3 [L,NC]
基本上,您需要将URL的附加部分设置为可选和非捕获(即,(?:)?
)
请注意,id
参数始终存在,因此可能为空
可以表示为:
RewriteRule ^service/?(?:([^/]+)/?)?$ service.php?id=$1 [NC]
RewriteRule ^hilfe(?:/?([^/]+)(?:/?([^/]+)(?:/?([^/]+)/?)?)?)?$ help/help.php?content=$1_$2_$3 [L,NC]
括号内的子模式的嵌套使其更难读取(维护、调试等)
生成的
content
URL参数将始终包含3个部分($1
、$2
和$3
),但它们可能是空的,从而导致content=\uuuu
、content=foo\uu
等。非常感谢。我同意,单一规则看起来更复杂。我可能会坚持使用多个规则的解决方案。不客气。它实际上比我第一次发布的要复杂一点。因为尾随斜杠在每个规则上都是可选的(除了最长的规则外,我在所有规则上都强制使用它,有3个可变部分)。我已经更新了“组合”规则,允许在所有变体上省略尾部斜杠。然而,我也可能坚持使用多个规则的解决方案。