regex - mod_rewrite 和正则表达式 OR 条件

标签 regex apache .htaccess mod-rewrite

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/

相关文章:

Apache Ivy : Dependency Ivy FIles

javascript - Apache:什么可能会去除空格并以其他方式更改 .js 文件?

regex - mod_rewrite 可以做数学吗?

带和不带 WWW 的 Apache 重定向 URL

java - 匹配最接近的组,我无法用语言来表达

java - 匹配标签内的内容

javascript - 为什么这个简单的 JavaScript 不起作用?

jquery - 返回同一页面的 CodeIgniter AJAX 错误

php - .htaccess 和 $_GET 混淆

php - 如果列表标签位于一组跨度标签之间,则用它替换列表标签