OR 条件在 mod_rewrite 中有效吗?我的规则是抛出内部服务器错误:
RewriteRule ^(Bob|Sam|Arnold|Brian).htm$ http://newdomain.net/$1 [R=301, L]
或者,是否有更好的重写系统可以加载可能的页面名称列表以进行重写?或者也许有一种相反的方法来做到这一点 - 正则表达式来选择哪些页面不重写? (也就是说,不是索引
、缩写
或联系人
)。
最佳答案
您可能会收到 500 服务器错误,因为 L
标志前有一个空格。 Apache 在解析指令及其参数方面并不是那么聪明,因此当 apache 看到空格时,它会假定参数的开头/结尾。因此,[R=301,
和 L]
最终被解释为 2 个不同的参数,并且它们不能像这样单独有效。
“OR”功能很好。
RewriteRule ^(Bob|Sam|Arnold|Brian)\.htm$ http://newdomain.net/$1 [R=301,L]
您可以使用 ?!
类型的组进行否定匹配:
RewriteRule ^(?!index|abbreviations|contact)(.*)\.htm$ http://newdomain.net/$1 [R=301,L]
关于regex - mod_rewrite 和正则表达式 OR 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352047/