【发布时间】:2018-12-15 18:41:10
【问题描述】:
我在.htaccess 中有这组规则,按此顺序,由 Apache 2.4.33 处理:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(subdomain\.olddomain)\.com$ [NC]
RewriteRule ^ https://www.example.com/directory/%1%{REQUEST_URI} [R=301,L]
## for some of the specific rules below
RewriteBase /
<If "%{HTTP_HOST} =~ /^(?:.*\.)?olddomain\.(?:com|net)$/i">
## some other specific rules which do not fire
RewriteRule ^ https://%1example.com/directory%{REQUEST_URI} [R=301,L]
</If>
然而,具有一般规则集的 If 块似乎优先,尽管它遵循更具体的第一个重写到不同 URL 并以 L 终止的块。
将(?:.*\.)? 更改为(?:www\.)? 会按预期工作。此外,如果将第一个规则集移动到 If 块中(无论如何代码效率更高,但事情已经发展)。
除其他外,我已阅读 this 发帖,我理解但不适用于此处的情况,因为第一条规则如果被触发,则应重写域/主机,因此不应匹配 If 条件没有了。
@covener 对this 发布的评论也提到了变量/模块的优先级,但是是否有更通用的文档? (我已经阅读了关于 TFM 中表达式的指令和引用的文章,注意到If 之前的身份验证的评论也是如此)。
TIA 提供任何建议或解释。
【问题讨论】:
-
抱歉,您的标签似乎不是真正的标签,我从未看过这篇文章。
标签: apache2.4