从地址中提取出第一个主机或域说明后,MTA 将咨询重写规则以找出要执行的操作。将主机/域说明与每个规则的模式部分(即每个规则的左侧)进行比较。该比较不区分大小写。RFC 822 规定不区分大小写。MTA 不区分大小写,但在可能的情况下将保留大小写。
如果主机或域说明与任何模式均不匹配,即所谓的“与任何规则均不匹配”的情况,则主机或域说明的第一个部分(第一个句点前的部分,通常为主机名)将被删除并用星号 (*) 替换,然后将再次尝试查找生成的主机或域说明,但只在配置文件重写规则中查找(不查询域数据库)。
如果此操作失败,则会删除第一个部分并重复该过程。如果此操作也失败了,则会删除下一个部分(通常为子域),重写程序会再次尝试,首先带星号然后不带星号。包含星号的所有探测只在配置文件重写规则表中进行;不检查域数据库。此过程将继续,直到找到匹配或用尽整个主机或域说明。此过程的作用是尝试首先与最为特别的域匹配,然后逐渐与不太特别和比较一般的域匹配。
使用主机/域说明作为比较字符串 spec_1 和 spec_2 的初始值。(例如,spec_1 = spec_2 = a.b.c)。
将比较字符串 spec_1 与配置文件中每个重写规则的模式部分进行比较,然后与域数据库比较直到找到匹配。如果找到了匹配则将退出匹配过程。
如果未找到匹配,则 spec_2 最左侧的非星号部分将被转换为星号。例如,如果 spec_2 为 a.b.c,则将被更改为 *.b.c; 如果 spec_2 为 *.b.c,则将被更改为 *.*.c.。如果找到了匹配则会退出匹配过程。
如果未找到匹配,则比较字符串 spec_1 的第一部分(包括任何前导句点)将被删除。如果 spec_1 只有一个部分(例如 .c 或 c),则该字符串将被单个句点 "." 替换,如果结果字符串 spec_1 的长度为非零值,则您将返回步骤 1。 如果结果字符串长度为零(例如,为先前的 "."),则查找过程已失败并且您将退出匹配过程。
例如,假设地址 dan@sc.cs.siroe.edu 将被重写。这将导致 MTA 按照给定的顺序查找以下模式:
sc.cs.siroe.edu *.cs.siroe.edu .cs.siroe.edu *.*.siroe.edu .siroe.edu *.*.*.edu .edu *.*.*.* . |