关于“重写规则”菜单

使用“重写规则”菜单设置爬网和搜索URL和标题规则。

关于爬网列表存储URL规则

爬网URL规则指定如何重写它在Web内容中遇到的URL。 您可以指定不限数量的规则和条件,并且可以处理所遇到的URL的任何部分。

爬网规则对于重写URL的动态部分最有用,例如会话标识符对于访问您网站的每个客户都是唯一的。 您还可以使用重写规则从搜索自动机中隐藏URL的某些部分,如查询参数。 默认情况下,不指定任何规则,也不执行URL重写。

当网站被爬网时,嵌入的内容URL存储在要爬网的其他网页的临时列表中。 在将URL添加到此列表之前,会对其应用商店重写规则。 通常,存储重写规则用于从URL删除会话ID或强制执行特定会话ID以进行搜索。 当搜索自动机从列表检索URL时,检索重写规则用于再次操作该URL的部分。 通常,检索规则用于将时间敏感数据插入URL中。 它是最终的URL,用于从您的网站中实际检索页面。

请参阅关于爬网列表检索URL规则

通常,您只使用商店URL规则。 仅当URL包含动态数据(如会话ID),并且该动态数据随时间变化而保持有效时,才需要检索URL规则。 在这种情况下,您使用“商店URL规则”从遇到的URL获取数据的最新状态。 然后,当搜索自动机尝试检索页面时,您可以使用检索URL规则将该数据添加到每个URL。

每个规则都使用重写规则(RewriteRule)指令和一个或多个可选重写条件(RewriteCond)指定。 规则的顺序很重要。 规则集按规则循环。 当规则匹配时,它循环访问任何相应的重写条件。 按以下方式指定爬网URL规则:

RewriteCond TestString CondPattern [Flags] 
RewriteRule Pattern Substitution [Flags]

遇到嵌入的URL时,搜索自动机会尝试将URL与每个爬网规则的模式匹配。 如果模式匹配,重写引擎将查找相应的RewriteCond指令。 如果不存在条件,则URL将替换为由替代字符串构建的新值,并继续使用规则集中的下一个规则。 如果存在条件,则按其列出的顺序处理它们。 重写引擎尝试将条件模式(CondPattern)与测试字符串(TestString)匹配。 如果两个匹配项匹配,则将处理下一个条件,直到不再提供任何条件。 如果所有条件都匹配,则URL将替换为规则中指定的替代。 如果条件不满足,则完整的条件集和相应的规则将失败。

关于RewriteRule指令

RewriteRule指令具有以下形式:

           
<i>RewriteRule Pattern Substitution [Flags]</i> 
        

Pattern 可以是POSIX常规表达式,它应用于当前URL。“当前URL”可能与原始请求的URL不同,因为之前的规则可能已匹配并更改了URL。

请参阅常规表达式

不能使用“not”字符(“!”) 以在模式前添加前缀。 “not”字符允许您取消模式,即仅当当前URL与此模式不匹配时,才使模式为true。 当与负模式匹配较好时,可以使用“not”字符,或将其用作最终默认规则。

注意

不能在模式中同时使用“not”字符和分组通配符。 此外,当替换字符串包含$N时,您不能使用否定的模式。

可以使用括号在图案中创建背参照,该背参照可由“替换”(Substition)和“条件”(Cond)“图案”(Pattern)引用。

换URL由替换字符串替换,该字符串包含以下内容:

纯文本:未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 以下是两种类型的反向引用:

  • RewriteRule Backreferences这些匹配相应RewriteRule模式中的反向引用,其格式为$N(0) <>例如,RewriteRule ^https:// ([^/]*) (.*)$ https://${tolower: $1} $2.

  • RewriteCond Backreferences 这些匹配的RewriteCond CondPattern中的返回引用,格式为%N(0) <>

变量:这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE是定义变量名称的字符串。 有关设置环境变量的详细信息,请参阅*[E]*标志。

函数:这些函数的形式为${NAME_OF_FUNCTION:key},其中NAME_OF_FUNCTION如下所示:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对​key​中的所有字符进行编码。
  • 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变;空格将转换为“+”,所有其他字符将转换为其%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码的字符都转换回单个字符。
注意

有一个特殊的替换字符串:'-'表示“NO替换”。 '-'字符串通常与C(链)标志一起使用,使您能够在发生替换之前将URL与多个模式匹配。

标志

(可选)将标记括在括号[]中。 多个标志以逗号分隔。

标志

描述

'last|L'

最后一条规则。

停止重写过程,并且不应用任何附加的重写规则。 使用此标志可阻止对当前URL进行任何进一步处理。

'next|N'

下一轮。

使用来自上一个重写规则(而非原始URL)的URL,重新运行重写过程(从第一个重写规则开始)。 小心不要制造死循环!

'chain|C'

用下一条规则链。

将当前规则链接到下一个规则(也可以将其链接到下一个规则,依此类推)。 如果规则匹配,则替代过程将照常继续。 如果规则不匹配,则跳过所有后续链式规则。

'nocase|NC'

没案子。

当模式与当前URL匹配时,使“模式”不区分大小写(即,“A-Z”和“a-z”之间没有区别)。

“跳过|S=num”

跳过下一个规则。

如果当前规则匹配,则此标志将强制重写引擎跳过规则集中的下一个num规则。 使用此标志生成伪if-then-else构造。 then-子句的最后一个规则变为skip=N,其中N是else-子句中的规则数。

注意: 此标志与'chain|C'标志不同!)

'env|E=VAR:VAL'

设置环境变量。

创建设置为值VAL的环境变量“VAR”,其中VAL可包含扩展的常规表达式回引,$N和%N。 您可以多次使用此标志设置多个变量。 以后可以通过%{VAR}在以下RewriteCond模式中取消引用变量。

使用此标志从URL删除和记住信息。

注意

存储重写规则和检索重写规则共享变量值。 由于这种行为,当遇到并存储嵌入式URL时,您可以将变量设置为时间敏感的会话id值。 当从临时存储列表检索下一个URL时,可以在检索该页面之前将最新的会话id值添加到该URL。

具有函数的RewriteRule的示例

假定您有一个区分大小写的服务器,它以不同方式处理字符串"www.mydomain.com""www.MyDomain.com"。 为了使服务器正常工作,请确保域始终为"www.mydomain.com",即使某些文档包含引用"www.MyDomain.com."的链接。为此,您可以使用以下规则:

RewriteRule  ^https:// 
<b>([^/]*)</b> 
<i>(.*)</i>$  https://${tolower:$1}$2

此重写规则使用函数tolower重写URL的域部分,以确保它始终为小写,如下所示:

  1. 模式(^https://([^/]*)(.*)$)包含一个背引用([^/]*),它匹配URL中https://和第一个/之间的所有字符。 该模式还包含第二个反向引用(.*),它与URL中所有剩余字符相匹配。

  2. 替换(https://${tolower:$1}$2)命令搜索引擎使用第一个反向引用(https:// ${tolower:$1}$2)上的tolower函数重写URL,使URL的其余部分保持不变。(https://${tolower:$1} $2)

因此,表单https://www.MyDomain.com/INTRO/index.Html的URL被重写为https://www.mydomain.com/INTRO/index.Html

关于RewriteCond指令

RewriteCond指令定义规则条件。 当RewriteCond在RewriteRule之前时,只有在规则的模式与当前标题匹配且附加条件适用时,才使用规则。 重写条件采用以下形式:

           
<i>RewriteCond TestString CondPattern [Flags]</i> 
        

TestString 是一个字符串,可以包含以下结构:

纯文本:未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 以下是两种类型的反向引用:

  • RewriteRule Backreferences这些匹配相应RewriteRule模式中的反向引用,其格式为$N(0) <>例如,RewriteRule ^https:// ([^/]*) (.*)$ https://${tolower: $1} $2

  • RewriteCond Backreferences 这些匹配的RewriteCond CondPattern中的返回引用,格式为%N(0)<>

变量:这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE可以是定义变量名称的字符串。 有关设置变量的详细信息,请参阅RewriteRule [E]​标志。

函数:这些函数的形式为${NAME_OF_FUNCTION:key},其中NAME_OF_FUNCTION如下所示:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对键中的所有字符进行编码。 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变,空格将转换为“+”,所有其他字符将转换为其%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码字符都转换回单个字符。

CondPattern 是带一些附加项的标准扩展规则表达式。模式字符串可以前缀为!字符(感叹号)以指定不匹配的模式。 您可以使用下列特殊变体之一,而不是真正的常规表达式字符串:

注意

您还可以在所有这些测试前加感叹号('!') 否定其意义。

CondPattern字符串

描述

“<CondPattern”

词法上更少。

将CondPattern视为普通字符串,并将其与TestString进行词法比较。 如果TestString的词法比CondPattern小,则为true。

'>CondPattern'

词法上更大。

将CondPattern视为普通字符串,并将其与TestString进行词法比较。 如果TestString的词法大于CondPattern,则为true。

“=CondPattern”

词法上相等。

将CondPattern视为普通字符串,并将其与TestString进行词法比较。 如果TestString在词法上等于CondPattern,即两个字符串完全相等(逐个字符),则为true。 如果CondPattern仅为“”(两个引号),则将TestString与空字符串进行比较。

标记
(可选)将标记括在括号中 []。多个标志以逗号分隔。

标志

描述

'nocase|NC'

没案子。

此标志使测试不区分大小写,即扩展的TestString和CondPattern中的“A-Z”和“a-z”之间没有区别。

'ornext|OR'

或者下一个条件。

使用此标志将规则条件与本地OR而不是隐式AND组合。 如果没有此标志,您必须多次写入第二个/规则。

示例

某些网页在访客第一次到达站点时分配“sessionid” CGI变量。 此变量用于标识访客,当访客浏览站点时,变量会一直传递。 由于搜索自动机看起来像是站点的访客,因此它被分配一个“sessionid”编号。 搜索自动机会保留此单个“sessionid”值,即使第二个站点页面尝试指定新值也是如此。 为确保这一点,您需要两个重写规则。

第一个规则用于标识和存储会话id变量:

RewriteCond  %{sessionid}  !.+ 
RewriteRule  ^.+sessionid= 
<b>([^&#]+)</b>.*$  -   
<i>[E=sessionid:$1]</i>

RewriteRule使用E标志([E=sessionid:$1])将会话ID CGI参数的当前值指定给变量sessionid$1引用第一个回引用,它包含在RewriteRule的模式([^&#]+)中的第一组括号之间。

常规表达式符^&#]+匹配单词sessionid和下一个**&**&#x200B;or&#x200B;**#**字符之间的URL部分。 由于此RewriteRule仅用于为sessionid变量创建初始值,因此它不会重写。 请注意,规则的“替换”字段设置为-,以指示不需要重写。

RewriteCond检查变量sessionid(%{sessionid})。 如果它连一个字符都没有(!.+),则匹配RewriteRule。

使用此规则,URL将读为https://www.domain.com/home/?sessionid=1234&function=start,并将值1234分配给变量sessionid

第二条规则用于重写与以下RewriteRule模式匹配的所有URL:

RewriteRule   
<b>^(.+)</b>sessionid=[^&#]+ 
<i>(.*)$</i>  $1sessionid=%{sessionid}$2

RewriteRule模式包含两个反向引用:(.+)(.*)。 第一个反向引用与sessionid之前的所有字符匹配。 第二个反向引用与终止&#后的所有字符匹配。

替代模式使用第一个反向引用,后跟字符串“sessionid=”,再跟由第一个规则%{sessionid}定义的会话ID变量的值,再跟第二个反向引用来重写URL。($1sessionid=%{sessionid} $2)

请注意,此RewriteRule不包含RewriteCond。 因此,它会对与RewriteRule Pattern​匹配的所有URL进行重写。 因此,如果sessionid变量(%{sessionid})的值为1234,则表单https://www.domain.com/products/?sessionid=5678&function=buy的URL将重写为https://www.domain.com/products/?sessionid=1234&function=buy

确认

重写引擎软件最初由Apache Group开发,用于Apache HTTP Server项目(https://www.apache.org/)。

添加爬网列表存储URL规则

可以添加爬网列表存储URL规则,以指定如何重写Web内容中遇到的URL。 您可以指定不限数量的规则和条件,并且可以处理所遇到的URL的任何部分。

添加爬网列表存储URL规则

  1. 在产品菜单中,单击​Settings > Rewrite Rules > Crawl List Store URL Rules

  2. 在Crawl List Store URL Rules字段中,输入所需的规则。

    允许以“#”(哈希)字符开头的空行和注释行。

  3. (可选)在Crawl List Store URL Rules页面的Test Crawl List Store URL Rules字段中,输入要测试其爬网规则的测试URL,然后单击​测试

  4. 单击​保存更改

  5. (可选)如果要预览结果,请重新构建分阶段站点索引。

    请参阅配置分阶段网站的增量索引

  6. (可选)在Crawl List Store URL Rules页面上,执行下列任一操作:

关于爬网列表检索URL规则

爬网URL规则指定如何重写Web内容中遇到的URL。 您可以指定不限数量的规则和条件,并且可以处理所遇到的URL的任何部分。

在客户看到规则的效果之前,请确保重新构建站点索引。

爬网规则对于重写URL的动态部分最有用,例如会话标识符对于访问您网站的每个客户都是唯一的。 您还可以使用重写规则从搜索自动机中隐藏URL的某些部分,如查询参数。 默认情况下,不指定任何规则,也不执行URL重写。

当网站被爬网时,嵌入的内容URL存储在要爬网的其他网页的临时列表中。 当搜索自动机从列表检索URL时,检索重写规则用于操作该URL的部分。 通常,检索规则用于将时间敏感数据插入URL。 它是最终的URL,用于从您的网站中实际检索页面。

仅当URL包含动态数据(如会话ID),并且该动态数据随时间变化而保持有效时,才需要检索重写规则。 在这种情况下,您使用“商店重写规则”从遇到的URL获取数据的最新状态。 然后,当搜索机器人检索页面时,您可以使用检索重写规则将该数据添加到每个URL。

每个规则都使用重写规则(RewriteRule)指令和一个或多个可选重写条件(RewriteCond)指定。 规则的顺序很重要。 规则集按规则循环。 当规则匹配时,它循环访问任何相应的重写条件。 按以下方式指定爬网URL规则:

RewriteCond TestString CondPattern [Flags] 
RewriteRule Pattern Substitution [Flags]

遇到嵌入的URL时,搜索自动机会尝试将URL与每个爬网规则的模式匹配。 如果模式匹配,重写引擎将查找相应的RewriteCond指令。 如果不存在条件,则URL将替换为由替代字符串构建的新值,并继续使用规则集中的下一个规则。 如果存在条件,则按其列出的顺序处理它们。 重写引擎尝试将条件模式(CondPattern)与测试字符串(TestString)匹配。 如果两个匹配项匹配,则将处理下一个条件,直到不再提供任何条件。 如果所有条件都匹配,则URL将替换为规则中指定的替代。 如果条件不满足,则完整的条件集和相应的规则将失败。

关于RewriteRule指令

RewriteRule指令具有以下形式:

           
<i>RewriteRule Pattern Substitution [Flags]</i> 
        

Pattern 可以是POSIX常规表达式,它应用于当前URL。“当前URL”可能与原始请求的URL不同,因为之前的规则可能已匹配并更改了URL。

请参阅常规表达式

不能使用“not”字符(“!”) 以在模式前添加前缀。 “not”字符允许您取消模式,即仅当当前URL与此模式不匹配时,才使模式为true。 当与负模式匹配较好时,可以使用“not”字符,或将其用作最终默认规则。

注意

不能在模式中同时使用“not”字符和分组通配符。 此外,当替换字符串包含$N时,您不能使用否定的模式。

可以使用括号在图案中创建背参照,该背参照可由“替换”(Substition)和“条件”(Cond)“图案”(Pattern)引用。

换URL由替换字符串替换,该字符串包含以下内容:

纯文本:未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 以下是两种类型的反向引用:

  • RewriteRule Backreferences这些匹配相应RewriteRule模式中的反向引用,其格式为$N(0) <>例如,RewriteRule ^https:// ([^/]*) (.*)$ https://${tolower: $1} $2.

  • RewriteCond Backreferences​这些匹配的RewriteCondCondPattern中的反向引用采用%N(0 <= N <= 9)形式。

变量:这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE是定义变量名称的字符串。 有关设置环境变量的详细信息,请参阅​[E]​标志。

函数:这些函数的形式为${NAME_OF_FUNCTION:key},其中NAME_OF_FUNCTION如下所示:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对​key​中的所有字符进行编码。
  • 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变;空格将转换为“+”,所有其他字符将转换为其%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码的字符都转换回单个字符。
注意

有一个特殊的替换字符串:“-”表示“不替换”。 “-”字符串通常与C(链)标志一起使用,使您能够在发生替换之前将URL与多个模式匹配。

标志

标志

描述

'last|L'

最后一条规则。

停止重写过程,并且不应用任何附加的重写规则。 使用此标志可阻止对当前URL进行任何进一步处理。

'next|N'

下一轮。

使用来自上一个重写规则(而非原始URL)的URL,重新运行重写过程(从第一个重写规则开始)。 小心不要造成死循环。

'chain|C'

用下一条规则链。

将当前规则链接到下一个规则(也可以将其链接到下一个规则,依此类推)。 如果规则匹配,则替代过程将照常继续。 如果规则不匹配,则跳过所有后续链式规则。

'nocase|NC'

没案子。

当模式与当前URL匹配时,使“模式”不区分大小写(即,“A-Z”和“a-z”之间没有区别)。

“跳过|S=num”

跳过下一个规则。

如果当前规则匹配,则此标志将强制重写引擎跳过规则集中的下一个num规则。 使用此标志生成伪if-then-else构造。 then-子句的最后一个规则变为skip=N,其中N是else-子句中的规则数。

注意: 此标志与'chain|C'标志不同!)

'env|E=VAR:VAL'

设置环境变量。

创建设置为值VAL的环境变量“VAR”,其中VAL可包含扩展的常规表达式回引,$N和%N。 您可以多次使用此标志设置多个变量。 以后可以通过%{VAR}在以下RewriteCond模式中取消引用变量。

使用此标志从URL删除和记住信息。

注意

存储重写规则和检索重写规则共享变量值。 由于这种行为,当遇到并存储嵌入式URL时,您可以将变量设置为时间敏感的会话id值。 当从临时存储列表检索下一个URL时,可以在检索该页面之前将最新的会话id值添加到该URL。

具有函数的RewriteRule的示例

假定您有一个区分大小写的服务器,它以不同方式处理字符串“www.mydomain.com”和“www.MyDomain.com”。 为使服务器正常工作,请确保域始终为“www.mydomain.com”,即使某些文档包含引用“www.MyDomain.com”的链接也是如此。 为此,可以使用以下规则:

RewriteRule  ^https:// 
<b>([^/]*)</b> 
<i>(.*)</i>$  https://${tolower:$1}$2

此重写规则使用函数tolower重写URL的域部分,以确保它始终为小写,如下所示:

  1. 模式(^https://([^/]*)(.*)$)包含一个反向引用 ([^/]*),它匹配URL中https://和第一个/之间的所有字符。 该模式还包含第二个反向引用(.*),它与URL中所有剩余字符相匹配。
  2. 替换(https://${tolower:$1}$2)命令搜索引擎使用第一个反向引用(https:// ${tolower:$1}$2)上的tolower函数重写URL,使URL的其余部分保持不变。(https://${tolower:$1} $2)

因此,表单https://www.MyDomain.com/INTRO/index.Html的URL被重写为https://www.mydomain.com/INTRO/index.Html

关于RewriteCond指令

RewriteCond指令定义规则条件。 当RewriteCond在RewriteRule之前时,只有在规则的模式与当前标题匹配且附加条件适用时,才使用规则。 重写条件采用以下形式:

           
<i>RewriteCond TestString CondPattern [Flags]</i> 
        

TestString 是一个字符串,可以包含以下结构:

纯文本:未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 以下是两种类型的反向引用:

  • RewriteRule Backreferences这些匹配相应RewriteRule模式中的反向引用,其格式为$N(0) <>例如,RewriteRule ^https:// ([^/]*) (.*)$ https://${tolower: $1} $2

  • RewriteCond Backreferences 这些匹配的RewriteCond CondPattern中的返回引用,格式为%N(0)<>

变量:这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE可以是定义变量名称的字符串。 有关设置变量的详细信息,请参阅RewriteRule [E]​标志。

函数:这些函数的形式为${NAME_OF_FUNCTION:key},其中NAME_OF_FUNCTION如下所示:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对键中的所有字符进行编码。 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变,空格将转换为“+”,所有其他字符将转换为%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码字符都转换回单个字符。

CondPattern 是带一些附加项的标准扩展规则表达式。模式字符串可以前缀为“!” 字符(感叹号)指定不匹配的模式。 您可以使用下列特殊变体之一,而不是真正的常规表达式字符串:

注意

您还可以在所有这些测试前加感叹号('!') 否定其意义。

CondPattern字符串

描述

“<CondPattern”

词法上更少。

将CondPattern视为普通字符串,并将其与TestString进行词法比较。 如果TestString的词法比CondPattern小,则为true。

'>CondPattern'

词法上更大。

将CondPattern视为普通字符串,并将其与TestString进行词法比较。 如果TestString的词法大于CondPattern,则为true。

“=CondPattern”

词法上相等。

将CondPattern视为普通字符串,并将其与TestString进行词法比较。 如果TestString在词法上等于CondPattern,即两个字符串完全相等(逐个字符),则为true。 如果CondPattern仅为“”(两个引号),则将TestString与空字符串进行比较。

标记
(可选)将标记括在括号中 []。多个标志以逗号分隔。

标志

描述

'nocase|NC'

没案子。

此标志使测试不区分大小写,即扩展的TestString和CondPattern中的“A-Z”和“a-z”之间没有区别。

'ornext|OR'

或者下一个条件。

使用此标志将规则条件与本地OR而不是隐式AND组合。 如果没有此标志,您必须多次写入第二个/规则。

示例

某些网页在访客第一次到达站点时分配“sessionid” CGI变量。 此变量用于标识访客,当访客浏览站点时,变量会一直传递。 由于搜索自动机看起来像是站点的访客,因此它被分配一个“sessionid”编号。 搜索自动机会保留此单个“sessionid”值,即使第二个站点页面尝试指定新值也是如此。 为确保这一点,您需要两个重写规则。

第一个规则用于标识和存储会话id变量:

RewriteCond  %{sessionid}  !.+ 
RewriteRule  ^.+sessionid= 
<b>([^&#]+)</b>.*$  -   
<i>[E=sessionid:$1]</i>

RewriteRule使用E标志([E=sessionid:$1])将会话ID CGI参数的当前值指定给变量sessionid$1引用第一个回引用,它包含在RewriteRule的模式([^&#]+)中的第一组括号之间。

常规表达式^&#]+与单词sessionid和下一个​&​或**#**​字符之间的URL部分匹配。 由于此RewriteRule仅用于为sessionid变量创建初始值,因此它不会重写。 请注意,规则的“替换”字段设置为-,以指示不需要重写。

RewriteCond检查变量sessionid(%{sessionid})。 如果它连一个字符都没有(!.+),则匹配RewriteRule。

使用此规则,URL将读为https://www.domain.com/home/?sessionid=1234&function=start,并将值1234分配给变量sessionid

第二条规则用于重写与以下RewriteRule模式匹配的所有URL:

RewriteRule   
<b>^(.+)</b>sessionid=[^&#]+ 
<i>(.*)$</i>  $1sessionid=%{sessionid}$2

RewriteRule模式包含两个反向引用:(.+)(.*)。 第一个反向引用与sessionid之前的所有字符匹配。 第二个反向引用与终止&#后的所有字符匹配。

替代模式使用第一个反向引用,后跟字符串“sessionid=”,再跟由第一个规则%{sessionid}定义的会话ID变量的值,再跟第二个反向引用来重写URL。($1sessionid=%{sessionid} $2)

请注意,此RewriteRule不包含RewriteCond。 因此,它会对与RewriteRule Pattern​匹配的所有URL进行重写。 因此,如果sessionid变量(%{sessionid})的值为1234,则表单https://www.domain.com/products/?sessionid=5678&function=buy的URL将重写为https://www.domain.com/products/?sessionid=1234&function=buy

确认

重写引擎软件最初由Apache Group开发,用于Apache HTTP Server项目(https://www.apache.org/)。

添加爬网列表检索URL规则

可以添加爬网列表检索URL规则,以指定如何重写Web内容中遇到的URL。 仅当URL包含动态数据(如会话ID),并且该动态数据随时间变化而保持有效时,才需要检索重写规则。

添加爬网列表检索URL规则

  1. 在产品菜单中,单击​Settings > Rewrite Rules > Crawl List Retrieve URL Rules

  2. 在Crawl List Retrieve URL Rules字段中,输入所需的规则。

    允许以“#”(哈希)字符开头的空行和注释行。

  3. (可选)在Crawl List Retrieve URL Rules页面的Test Crawl List Retrieve URL Rules字段中,输入要测试其爬网规则的测试URL,然后单击​测试

  4. 单击​保存更改

  5. (可选)如果要预览结果,请重新构建分阶段站点索引。

    请参阅配置分阶段网站的增量索引

  6. (可选)在Crawl List Retrieve URL Rules页面上,执行下列任一操作:

关于爬网标题规则

爬网标题规则指定在Web内容中遇到的标题存储在搜索索引中之前如何重新编写。

例如,您可以使用重写规则删除标题的一部分,如组织名称。 当网站被爬网时,遇到的标题会存储在临时缓冲区中。 但是,在将标题添加到此缓冲区之前,将对其应用标题规则。 默认情况下,网站搜索/销售没有爬网标题规则,也不进行标题修改。

在客户看到规则的效果之前,请重新构建站点索引。

您可以使用历史记录功能快速还原对爬网标题规则所做的任何更改。

规则可以由两个主要元素组成:重写规则和可选的RewriteCond。 您可以指定不限数量的规则和条件。 这些规则的顺序很重要,因为规则集是按规则循环的。 当规则匹配时,它循环访问任何(可选)相应的重写条件。 按以下方式指定爬网URL规则:

RewriteCond  
<i>TestString CondPattern [Flags]</i> 
RewriteRule  
<i>Pattern Substitution [Flags]</i> 
 
RewriteCond  
<i>TestString CondPattern [Flags]</i> 
RewriteRule  
<i>Pattern Substitution [Flags]</i>

遇到标题时,搜索自动机会尝试将标题与每个爬网规则的“模式”匹配。 如果模式匹配,重写引擎将查找相应的RewriteCond指令。 如果不存在条件,则URL将替换为由替代字符串构建的新值,并继续使用规则集中的下一个规则。 如果存在条件,则按其列出的顺序处理它们。 重写引擎尝试将条件模式(CondPattern)与测试字符串(TestString)匹配。 如果两个匹配项匹配,则将处理下一个条件,直到不再提供任何条件。 如果所有条件都匹配,则URL将替换为规则中指定的替代。 如果条件不满足,则完整的条件集和相应的规则将失败。

在文本框中输入爬网URL规则,然后单击保存更改。 允许以“#”(哈希)字符开头的空行和注释行。 要测试搜索规则,可在“测试重写规则”文本框中输入测试URL,然后单击测试。

RewriteRule指令

每个RewriteRule指令定义一个重写规则。 规则按其列出的顺序应用。 重写规则采用以下形式:

RewriteRule Pattern Substitution [Flags]

式可以是POSIX常规表达式,应用于当前标题。“当前标题”与原始标题不同,因为之前的规则已经匹配并更改了它。

请参阅常规表达式

可以使用“not”字符(“!”) 以在模式前添加前缀。 “not”字符允许您取消模式,即仅当当前标题与模式不匹配时为true。 当与负模式匹配较好时,可以使用“not”字符,或将其用作最终默认规则。 注意:不能在模式中同时使用“not”字符和分组通配符。 此外,当替换字符串包含$N时,您不能使用否定的模式。

可以使用括号创建背参照,后参照可以由Substition和CondPattern引用。

换标题由替换字符串替换。该字符串可以包含以下内容:

纯文本——未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 以下是两种类型的反向引用:

  • RewriteRule Backreferences

    这些匹配相应RewriteRule模式中的反向引用,格式为$N(0 <= N <= 9)。 例如,RewriteRule ^My[[:blank:]] (.*)$ ${toupper: $1}

  • RewriteCond Backreferences

    这些匹配返回的引用在上次匹配的RewriteCond CondPattern中,格式为%N(0 <= N <= 9)。

变量这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE可以是定义变量名称的字符串。 有关设置环境变量的详细信息,请参阅[E]标志。

函数以下是${NAME_OF_FUNCTION格式的函数:key},其中NAME_OF_FUNCTION为:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
注意

有一个特殊的替换字符串:“-”表示“不替换”。 “-”字符串通常对C(链)标志有用,允许您在发生替换之前将标题与多个模式匹配。

标记 (可选)

标记括在括号[]中,多个标记以逗号分隔:

标志

描述

'last|L'

最后一条规则。

停止重写过程,不应用任何附加的重写规则。 使用此标志可防止对当前标题进行任何进一步处理。

'next|N'

下一轮。

使用来自最后重写规则的标题(而非原始标题)重新运行重写过程(从第一个重写规则再次开始)。 小心不要造成死循环。

'chain|C'

用下一条规则链。

将当前规则链接到下一个规则(也可以将其链接到下一个规则,依此类推)。 如果规则匹配,则替代过程将照常继续。 如果规则不匹配,则跳过所有后续链式规则。

'nocase|NC'

没案子。

当图案与当前标题匹配时,使图案不区分大小写(即,“A-Z”和“a-z”之间没有区别)。

“跳过|S=num”

跳过下一个规则或规则。

如果当前规则匹配,则此标志将强制重写引擎跳过规则集中的下一个num规则。 使用它生成伪if-then-else构造。 then-子句的最后一个规则变为skip=N,其中N是else-子句中的规则数。 (注:这与'chain|C'标志不同!)

'env|E=VAR:VAL'

设置环境变量。

创建设置为值VAL的环境变量“VAR”,其中VAL可包含常规表达式回引,$N和%N,该值已展开。 您可以多次使用此标志设置多个变量。 以后可以通过%{VAR}在以下RewriteCond模式中引用变量。 使用此标志从标题中删除和记住信息。

RewriteCond指令(可选)

RewriteCond指令定义规则条件。 当RewriteCond在RewriteRule之前时,只有在规则的模式与当前标题匹配且附加条件适用时,才使用规则。

重写条件指令采用以下形式:

RewriteCond TestString CondPattern [Flags] 

TestString 是一个可以包含以下构造的字符串:

纯文本——未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 有两种类型的反向引用:

  • RewriteRule Backreferences这些匹配RewriteRule模式中的反向引用,其格式为$N(0 <= N <= 9)。 例如,RewriteRule ^My[[:blank:]] (.*)$ ${toupper: $1}
  • RewriteCond Backreferences这些匹配的RewriteCondCondPattern中的反向引用采用%N(0 <= N <= 9)形式。

变量这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE可以是定义变量名称的字符串。 有关设置环境变量的详细信息,请参阅[E]标志。

函数这些函数是${NAME_OF_FUNCTION:key}形式的函数,其中NAME_OF_FUNCTION为:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对键中的所有字符进行编码。
  • 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变,空格将转换为“+”,所有其他字符将转换为%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码的字符都转换回单个字符。

CondPattern 是带一些附加项的标准扩展规则表达式。模式字符串可以前缀为“!” 字符(感叹号)指定不匹配的模式。 您可以使用下列特殊变体之一,而不是真正的常规表达式字符串。

注意

可以在所有这些测试前加感叹号('!') 否定其意义。

CondPattern字符串

描述

“<CondPattern”

词法上更少。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString词法小于CondPattern,则为true。

'>CondPattern'

从词法上讲更大。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString词法上大于CondPattern,则为true。

“=CondPattern”

在词法上相等。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString在词法上等于CondPattern,即两个字符串完全相等(逐个字符),则为true。 如果CondPattern只是""(两个引号),则将TestString与空字符串进行比较。

标记 (可选)

标记括在括号[]中,多个标记以逗号分隔:

标志

描述

'nocase|NC'

没案子。

使测试不敏感。 即,在展开的TestStringCondPattern中,“A-Z”和“a-z”之间没有差异。

'ornext|OR'

或者下一个条件。

使用此标志将规则条件与本地OR而不是隐式AND组合。 如果没有此标志,您必须多次写入第二个/规则。

示例

假定您拥有一个标准标题格式的公司网站:“我的公司”后跟连字符,然后是页面特定的描述(例如,“我的公司-欢迎”或“我的公司-新闻”)。 您希望从标题中去除“我的公司-”,并在为站点编制索引时将整个标题转换为大写字母。

以下重写规则使用函数触摸器将标题的描述性部分仅重写为大写:

RewriteRule  ^My[[:blank:]]Company[[:blank:]]-[[:blank:]] 
<b>(.*)</b>$  ${toupper: 
<b>$1</b>}

规则的模式(^My[[:blank:]]Company[[:blank:]]-[[:blank:]] (.*))包含与“我的公司-”后面的标题内容相匹配的返回引用(.*)。 请记住,带有括号()的图案的一部分周围会创建可由替换引用的反向引用。 在此示例中,替换(${toupper:$1})使用toupper函数重写该反向引用($1)。

因此,“我的公司-欢迎”形式的标题被改写为“欢迎”。

确认

重写引擎软件最初由Apache Group开发,用于Apache HTTP Server项目(https://www.apache.org/)。

添加爬网标题规则

可以添加爬网标题规则,以指定在Web内容中遇到的标题存储在搜索索引中之前如何重写它们。

添加爬网标题规则

  1. 在产品菜单中,单击​Settings > Rewrite Rules > Crawl Title Rules

  2. 在Crawl Title Rules字段中,输入所需的规则。

    允许以“#”(哈希)字符开头的空行和注释行。

  3. (可选)在Crawl Title Rules页面的Test Crawl Title Rules字段中,输入要测试其搜索规则的测试URL,然后单击​测试

  4. 单击​保存更改

  5. (可选)如果要预览结果,请重新构建分阶段站点索引。

    请参阅配置分阶段网站的增量索引

  6. (可选)在Crawl Title Rules页面上,执行下列任一操作:

关于搜索URL规则

搜索URL规则指定网站搜索结果中URL的显示方式。 规则在完整URL上运行。 可以处理URL的任何部分,包括会话ID信息经常保留的查询参数。

通常,搜索URL规则用于将会话ID插入URL。 但是,您也可以使用搜索URL规则更改随结果显示的域名。 默认情况下,不指定任何规则,也不执行URL修改。

搜索URL规则可以包含两个主要元素:重写规则和可选的RewriteCond。 当URL作为搜索结果的一部分包含在内时,将使用规则对其进行操作。 您可以指定不限数量的搜索URL规则和条件。 这些规则的顺序很重要,因为规则集是通过逐个规则循环的。 当规则匹配时,软件循环处理任何(可选)相应的重写条件。 按以下方式指定爬网URL规则:

RewriteCond  
<i>TestString CondPattern [Flags]</i> 
RewriteRule  
<i>Pattern Substitution [Flags]</i> 
 
RewriteCond  
<i>TestString CondPattern [Flags]</i> 
RewriteRule  
<i>Pattern Substitution [Flags]</i>

处理URL时,网站搜索/销售会尝试将其与每个搜索规则的模式匹配。 如果匹配失败,重写引擎将立即停止处理该规则,并继续执行集合中的下一个规则。 如果模式匹配,重写引擎将查找相应的RewriteCond指令。 如果不存在条件,则URL将替换为新值。 此值由替换字符串构造,并与规则集中的下一个规则一起继续。 如果存在条件,则列出这些条件的顺序是处理它们的方式。 重写引擎尝试将条件模式(CondPattern)与测试字符串(TestString)匹配。 如果两个匹配项匹配,则将处理下一个条件,直到不再提供任何条件。 如果所有条件都匹配,则URL将替换为规则中指定的替代。 如果条件不满足,则完整的条件集和相应的规则将失败。

关于RewriteRule指令

重写规则采用以下形式:

RewriteRule  
<i>Pattern Substitution [Flags]</i>

式可以是POSIX常规表达式,应用到当前URL。“当前URL”可能与原始URL不同,因为以前的规则可能已经匹配和更改了它。

请参阅常规表达式

可以使用“not”字符(“!”) 以在模式前添加前缀。 “not”字符允许您取消模式。 换言之,仅当当前URL与模式不匹配时,此值才为true。 当与负模式匹配较好时,可以使用“not”字符,或者作为最终默认规则。 请注意,您不能在模式中同时使用“not”字符和分组通配符。 此外,当替换字符串包含$N时,您不能使用否定的模式。

可以使用括号创建背参照,后参照可以由Substition和CondPattern引用。

换URL被替换字符串完全替换,该字符串可包含以下内容:

纯文本——未更改传递的文本。

背景引用提供对“图案”或“条纹”的分组部分(内括号)的访问。 有两种类型的反向引用:

RewriteRule Backreferences这些匹配RewriteRule模式中的反向引用,其格式为$N(0 <= N <= 9)。 例如,RewriteRule ^My[[:blank:]] (.*)$ ${toupper: $1}

RewriteCond Backreferences-这些与上次匹配的RewriteCond CondPattern中的反向引用相匹配,格式为%N(0 <= N <= 9)。

函数:这些函数的形式为${NAME_OF_FUNCTION:key},其中NAME_OF_FUNCTION为:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对​key​中的所有字符进行编码。
  • 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变;空格转换为“+”;所有其他字符都将转换为%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码的字符都转换回单个字符。
注意

有一个特殊的替换字符串:“-”表示“不替换”。 “-”字符串通常与C(链)标志结合使用。 它允许您在进行替换之前将URL与多个模式匹配。

标记 (可选)

标记括在括号[]中,多个标记以逗号分隔:

标志

描述

'last|L'

最后一条规则。

停止重写过程,不要应用任何附加的重写规则。 使用此标志可阻止对当前URL进行任何进一步处理。

'next|N'

下一轮。

使用来自最后一个重写规则(而非原始URL)的URL重新运行重写过程(从第一个重写规则再次开始)。 小心不要造成死循环!

'chain|C'

用下一条规则链。

此标志将当前规则链接到下一个规则,该规则也可以与其后续规则链接,依此类推。 如果规则匹配,则替代过程将照常继续。 如果规则不匹配,则跳过所有后续链式规则。

'nocase|NC'

没案子。

此标志使“图案”不区分大小写。 换言之,当模式与当前URL匹配时,“A-Z”和“a-z”之间没有差异。

“跳过|S=num”

跳过下一个规则或规则。

如果当前规则匹配,则此标志将强制重写引擎跳过规则集中的下一个num规则。 使用它生成伪if-then-else构造。 then-子句的最后一个规则变为skip=N,其中N是else-子句中的规则数。 (注:这与'chain|C'标志不同!)

'env|E=VAR:VAL'

设置环境变量。

此标志创建一个设置为值VAL的环境变量“VAR”。 VAL可包含正则表达式回引,$N和%N,这些回引已展开。 您可以多次使用此标志设置多个变量。 以后可以通过%{VAR}在以下RewriteCond模式中取消引用变量。 使用此标志从URL删除和记住信息。

请注意,存储重写规则和检索重写规则共享变量值。 因此,在遇到并存储嵌入式URL时,可以将变量设置为时间敏感的会话id值。 当从临时存储列表检索下一个URL时,可以在检索该页面之前将最新的会话id值添加到该URL。

示例

假定您有区分大小写的服务器。 它以不同方式处理字符串“www.mydomain.com”和“www.MyDomain.com”。 要使服务器正常工作,您必须确保域始终为“www.mydomain.com”,即使某些文档包含引用“www.MyDomain.com”的链接也是如此。 为此,可以使用以下规则:

RewriteRule  ^https:// 
<b>([^/]*)</b> 
<i>(.*)</i>$  https://${tolower:$1}$2 

此重写规则使用函数“tolower”重写URL的域部分,以确保它始终为小写:

  1. 模式(^https://([^/]*)(.*)$)包含一个背引用​([^/]*),它匹配URL中“https://”和第一个“/”之间的所有字符。 该模式还包含第二个反向引用​(.*),它匹配URL中所有剩余字符。

  2. 替换(https://${tolower:$1}$2)命令搜索引擎使用第一个反向引用(https://**${tolower:$1**}$2)上的​tolower​函数重写URL,而不更改URL的其余部分(https://${tolower:$1}*$2*)

因此,表单https://www.MyDomain.com/INTRO/index.Html的URL被重写为https://www.mydomain.com/INTRO/index.Html

RewriteCond指令 (可选)

RewriteCond指令定义规则条件。 当RewriteCond在RewriteRule之前时,只有在规则的模式与当前标题匹配且附加条件适用时,才使用规则。

重写条件指令采用以下形式:

RewriteCond  
<i>TestString CondPattern [Flags]</i>

TestString 是一个字符串,它可以包含以下结构:

纯文本:未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 有两种类型的反向引用:

  • RewriteRule Backreferences​这些匹配RewriteRule模式中的反向引用,形式为$N(0 <= N <= 9)。 例如,RewriteRule ^My[[:blank:]] (.*)$ ${toupper: $1}

  • RewriteCond Backreferences 这些匹配的RewriteCond CondPattern中的返回引用,格式为%N(0) <>

变量这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE可以是定义变量名称的字符串。 有关设置变量的详细信息,请参阅RewriteRule [E]​标志。

注意

重写规则通常利用变量。 当前URL中的所有CGI参数都会自动变为变量。 例如,搜索URL "https://search.atomz.com/search/?sp_a=sp00000000&sp_q="Product"&session=1234&id=5678"将自动提供四个变量,这些变量可在重写规则中引用。 在此示例中,一个变量称为“session”,其值为“1234”,而另一个变量称为“id”,其值为“5678”。 (另外两个变量是sp_asp_q。) 您应将网页上搜索表单中的所有必要变量作为隐藏字段进行传递。 在此示例中,您应传递“session”和“id”值,它们标识执行搜索的网站用户。 要在搜索表单上传递隐藏字段,请使用<input type=hidden name="session" value="1234">等标记。

函数这些函数是${NAME_OF_FUNCTION:key}形式的函数,其中NAME_OF_FUNCTION为:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对​key​中的所有字符进行编码。 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变,空格将转换为“+”,所有其他字符将转换为%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码字符都转换回单个字符。

CondPattern 是带一些附加项的标准扩展规则表达式。模式字符串可以前缀为“!” 字符(感叹号)指定不匹配的模式。 您可以使用下列特殊变体之一,而不是真正的常规表达式字符串。

可以使用感叹号('!')在所有这些测试前添加前缀。 否定其意义。

CondPattern字符串

描述

“<CondPattern”

词法上更少。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString词法小于CondPattern,则为true。

'>CondPattern'

从词法上讲更大。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString词法上大于CondPattern,则为true。

“=CondPattern”

在词法上相等。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString在词法上等于CondPattern,则为true。 也就是说,两个字符串完全相等(逐个字符)。 如果CondPattern只是""(两个引号),则将TestString与空字符串进行比较。

标记 (可选)

标记括在括号[]中,多个标记以逗号分隔:

“nocase|NC”(无大小写):这使测试不区分大小写。 换言之,在展开的​TestString​和​CondPattern​中,“A-Z”和“a-z”之间没有差异。

“ornext|OR”(或下一个条件):使用它将规则条件与局部OR(而不是隐式AND)组合。 如果没有此标志,您必须多次写入第二个/规则。

示例

某些网页在客户第一次到达网站时分配一个“sessionid” CGI变量。 此变量用于标识客户,并且当客户浏览站点时,该变量会一直传递。 由于搜索机器人看起来像您网站的客户,因此会为它分配一个“sessionid”编号。 搜索自动机会保留此单个“sessionid”值,即使第二个站点页面尝试指定新值也是如此。 为确保这一点,您需要以下重写规则:

RewriteCond  %{sessionid}  .+ 
RewriteRule  ^ 
<b>(.+)</b>sessionid=[^&#]+ 
<i>(.*)</i>$   
<b>$1</b>sessionid=%{sessionid} 
<i>$2</i>

RewriteRule模式包含两个反向引用:(.+) 和 (.*)。第一个反向引用匹配“sessionid=”之前的所有字符。 第二个反向引用匹配会话ID终止“&”或“#”后的所有字符。

替代模式使用第一个反向引用,后跟字符串“sessionid=”,再跟会话ID变量的值,该变量在URL中作为CGI参数传递,后跟第二个反向引用。($1sessionid=%{sessionid}$2)

RewriteCond​检查变量sessionid (%{sessionid})。 如果它至少包含一个字符(.+),则匹配RewriteRule。

因此,如果搜索查询为"https://search.atomz.com/search/?sp_a=sp99999999&sp_q=word&sessionid=5678",则将重写所有搜索结果URL,使“sessionid”值为“5678”,而不是搜索机器人在搜索您的站点并保存链接时遇到的“sessionid”值。

确认

重写引擎软件最初由Apache Group开发,用于Apache HTTP Server项目(https://www.apache.org/)。

添加搜索URL规则

您可以添加搜索URL规则,以指定网站搜索结果中URL的显示方式。 规则在完整URL上运行。 您可以处理URL的任何部分,包括会话ID信息经常保留的查询参数。

添加搜索URL规则

  1. 在产品菜单中,单击​Settings > Rewrite Rules > Search URL Rules

  2. 在Search URL Rules字段中,输入所需的规则。

    允许以“#”(哈希)字符开头的空行和注释行。

  3. (可选)在Search URL Rules页面的Test Search URL Rules字段中,输入要测试其爬网规则的测试URL,然后单击​测试

  4. 单击​保存更改

  5. (可选)如果要预览结果,请重新构建分阶段站点索引。

    请参阅配置分阶段网站的增量索引

  6. (可选)在Search URL Rules页面上,执行下列任一操作:

关于搜索标题规则

搜索标题规则指定网站搜索结果中标题的显示方式。 标题的任何部分都可以处理。

重写规则可用于删除标题的某一部分,如组织名称。 默认情况下,网站搜索/销售没有标题规则,也不进行标题修改。

标题规则可以由两个主要元素组成:RewriteRule和可选RewriteCond。 可以指定不限数量的规则和条件。 这些规则的顺序很重要,因为规则集是按规则循环的。 当规则匹配时,软件循环处理任何(可选)相应的重写条件。 搜索标题规则按以下方式指定:

RewriteCond  
<i>TestString CondPattern [Flags]</i> 
RewriteRule  
<i>Pattern Substitution [Flags]</i> 
 
RewriteCond  
<i>TestString CondPattern [Flags]</i> 
RewriteRule  
<i>Pattern Substitution [Flags]</i>

遇到标题时,网站搜索/销售会尝试将其与每个爬网规则的模式匹配。 如果模式匹配,重写引擎将查找相应的RewriteCond指令。 如果不存在条件,则标题将替换为从替代字符串构建的新值,并继续使用规则集中的下一个规则。 如果存在条件,则按其列出的顺序处理它们。 重写引擎尝试将条件模式(CondPattern)与测试字符串(TestString)匹配。 如果两个匹配项匹配,则将处理下一个条件,直到不再提供任何条件。 如果所有条件都匹配,则URL将替换为规则中指定的替代。 如果条件不满足,则完整的条件集和相应的规则将失败。

RewriteRule指令

每个RewriteRule指令定义一个重写规则。 规则按其列出的顺序应用。 重写规则采用以下形式:

RewriteRule Pattern Substitution [Flags]

式A POSIX常规表达式,应用于当前标题。“当前标题”可能与原始标题不同,因为之前的规则可能已经匹配和更改了它。

请参阅常规表达式

您可以使用“not”字符(“!”) 以在模式前添加前缀。 “not”字符允许您取消模式。 也就是说,仅当当前标题与模式不匹配时才为true。 当与负模式匹配较好时,可以使用“not”字符,或将其用作最终默认规则。 注意:不能在模式中同时使用“not”字符和分组通配符。 此外,当替换字符串包含$N时,您不能使用否定的模式。

可以使用括号创建背参照,后参照可以由“替换”(Substitution)和“CondPattern”(CondPattern)引用。

换标题由替换字符串完全替换,该字符串可包含以下内容:

纯文本——未更改传递的文本。

景——提供对“图案”或“条纹”的分组部分(内括号)的访问。以下是两种类型的反向引用:

  • RewriteRule Backreferences这些匹配相应RewriteRule模式中的反向引用,其格式为$N(0) <>例如,RewriteRule ^My[[:blank:]] (.*)$ ${toupper: $1}

  • RewriteCond Backreferences​这些匹配的RewriteCondCondPattern中的反向引用采用%N(0 <= N <= 9)形式。

量这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE可以是定义变量名称的字符串。有关设置环境变量的详细信息,请参阅[E]标志。 变量也可以在生成搜索结果的搜索表单中定义。

数以下是${NAME_OF_FUNCTION格式的函数:key},其中NAME_OF_FUNCTION为:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。

有一个特殊的替换字符串:“-”表示“不替换”。 “-”字符串通常与C(链)标志结合使用,允许您在发生替换之前将标题与多个模式匹配。

标记 (可选)

标记括在括号[]中,多个标记以逗号分隔:

标志

描述

'last|L'

最后一条规则。

停止重写过程,不要应用任何附加的重写规则。 使用此标志可防止对当前标题进行任何进一步处理。

'next|N'

下一轮。

使用来自上次重写规则(而非原始标题!)的标题重新运行重写过程(从第一个重写规则再次开始)。 小心不要造成死循环。

'chain|C'

用下一条规则链。

此标志将当前规则链接到下一个规则(也可以将其链接到下一个规则,依此类推)。 如果规则匹配,则替代过程将照常继续。 如果规则不匹配,则跳过所有后续链式规则。

'nocase|NC'

没案子。

此标志使“图案”不区分大小写。 即,当图案与当前标题匹配时,“A-Z”和“a-z”之间没有差异。

“跳过|S=num”

跳过下一个规则或规则。

如果当前规则匹配,则此标志将强制重写引擎跳过规则集中的下一个num规则。 使用它生成伪if-then-else构造。 then-子句的最后一个规则变为skip=N,其中N是else-子句中的规则数。 (这与'chain|C'标志不同!)

'env|E=VAR:VAL'

设置环境变量。

此标志创建一个设置为值VAL的环境变量“VAR”,其中VAL可以包含常规表达式回引,$N和%N,这将展开。 您可以多次使用此标志设置多个变量。 以后可以通过%{VAR}在以下RewriteCond模式中引用变量。 使用此标志从标题中删除和记住信息。

RewriteCond指令(可选)

RewriteCond指令定义规则条件。 当RewriteCond在RewriteRule之前时,只有在规则的模式与当前标题匹配且附加条件适用时,才使用规则。

重写条件指令采用以下形式:

RewriteCond TestString CondPattern [Flags]

TestString 是一个可以包含以下构造的字符串:

纯文本——未更改传递的文本。

“背景”(Backreferences)提供对“图案”(Pattern)或“条件”(CondPattern)的分组部分(内括号)的访问。 有两种类型的反向引用:

  • RewriteRule Backreferences这些匹配相应RewriteRule模式中的反向引用,其格式为$N(0) <>例如,RewriteRule ^My[[:blank:]] (.*)$ ${toupper: $1}

  • RewriteCond Backreferences 这些匹配的RewriteCond CondPattern中的返回引用,格式为%N(0) <>

量这些是%{NAME_OF_VARIABLE}形式的变量,其中NAME_OF_VARIABLE可以是定义变量名称的字符串。有关设置环境变量的详细信息,请参阅[E]标志。 变量也可以在生成搜索结果的搜索表单中定义。

数这些函数的形式为${NAME_OF_FUNCTION:key},其中NAME_OF_FUNCTION为:

  • tolower使​key​中的所有字符都小写。
  • toupper使​key​中的所有字符都为大写。
  • 转义URL对​key​中的所有字符进行编码。
  • 字符“a”。z', 'A'…'Z', '0'…'“9”、“*”、“-”、“.”、“/”、“@”和“_”保持不变,空格将转换为“+”,所有其他字符将转换为%xx URL编码的等效字符。
  • unescape将“+”转换回空格,所有%xx URL编码的字符都转换回单个字符。

有一个特殊的替换字符串:“-”表示“不替换”。 “-”字符串通常与C(链)标志结合使用,允许您在发生替换之前将URL与多个模式匹配。

CondPattern 带一些附加的标准扩展规则表达式。模式字符串可以前缀为“!” 字符(感叹号)指定不匹配的模式。 您可以使用下列特殊变体之一,而不是真正的常规表达式字符串。

所有这些测试都可以用感叹号('!')作为前缀 否定其意义。

CondPattern字符串

描述

“<CondPattern”

词法上更少。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString词法小于CondPattern,则为true。

'>CondPattern'

从词法上讲更大。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString词法上大于CondPattern,则为true。

“=CondPattern”

在词法上相等。

CondPattern视为普通字符串,并将其与TestString从词法上进行比较。 如果TestString在词法上等于CondPattern,则为true。 也就是说,两个字符串完全相等(逐个字符)。 如果CondPattern只是""(两个引号),则将TestString与空字符串进行比较。

标记 (可选)

标记括在括号[]中,多个标记以逗号分隔:

标志

描述

“nocase|NC”(无大小写)

使测试不敏感。 即,在展开的TestStringCondPattern中,“A-Z”和“a-z”之间没有差异。

“ornext|OR”(或下一个条件)

使用它将规则条件与局部OR(而不是隐式AND)组合。 如果没有此标志,您必须多次写入第二个/规则。

示例

假定您拥有一个标准标题格式的公司网站:“我的公司”后跟连字符,然后是页面特定的描述(例如,“我的公司-欢迎”或“我的公司-新闻”)。 您希望从标题中去除“我的公司-”,并在为站点编制索引时将整个标题转换为大写字母。

以下重写规则使用函数触摸器将标题的描述性部分仅重写为大写:

RewriteRule  ^My[[:blank:]]Company[[:blank:]]-[[:blank:]] 
<b>(.*)</b>$  ${toupper: 
<b>$1</b>} 

规则的模式(^My[[:blank:]]Company[[:blank:]]-[[:blank:]] (.*))包含与“我的公司-”后面的标题内容相匹配的返回引用​(.*)。 请记住,带有括号()的图案的一部分周围会创建可由替换引用的反向引用。 在此示例中,替换(${toupper:$1})使用toupper函数重写该反向引用($1)。

因此,“我的公司-欢迎”形式的标题被改写为“欢迎”。

确认

重写引擎软件最初由Apache Group开发,用于Apache HTTP Server项目(https://www.apache.org/)。

添加搜索标题规则

您可以添加搜索标题规则以指定网站搜索结果中标题的显示方式。 您可以操作标题的任何部分。

添加搜索标题规则

  1. 在产品菜单中,单击​Settings > Rewrite Rules > Search Title Rules

  2. 在Search Title Rules字段中,输入所需的规则。

    允许以“#”(哈希)字符开头的空行和注释行。

  3. (可选)在Search Title Rules页面的Test Search Title Rules字段中,输入测试标题,然后单击​测试

  4. 单击​保存更改

  5. (可选)如果要预览结果,请重新构建分阶段站点索引。

    请参阅配置分阶段网站的增量索引

  6. (可选)在Search Title Rules页面上,执行下列任一操作:

在此页面上