OR 条件是否适用于mod_rewrite?我的规则是抛出内部服务器错误:
RewriteRule ^(Bob|Sam|Arnold|Brian).htm$ http://newdomain.net/$1 [R=301, L]
或者,是否有更好的重写系统可以加载可能的页面名称列表进行重写?或者可能是一种相反的方法 - 正则表达式选择哪些页面不重写? (说,不是index
,abbreviations
或contact
)。
答案 0 :(得分:2)
您可能收到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]
答案 1 :(得分:0)
以下是我将如何处理OR。您需要将它们分成RewriteCond
。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(Bob|Sam|Arnold|Brian).htm$ [OR]
# Another RewriteCond would go here as the "OR" like:
RewriteCond %{REQUEST_URI} !^(index|abbreviations|contact) # ! = "not"
RewriteRule ^(.*)$ http://newdomain.net/$1 [R=301, L]
只要能够“加载可能的页面名称列表进行重写”,除了用mod_rewrite
手动列出它们之外,我不知道有什么方法可以做到这一点。我知道nginx,例如,据说有更深入的特征涉及到它。