关于“重写规则”菜单

使用“重写规则”菜单设置爬网和搜索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 可以是应用于当前URL的POSIX常规表达式。“当前URL”可能与原始请求的URL不同,因为之前的规则可能已经匹配和更改了URL。

请参阅常规表达式

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

注意

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

可以使用括号在图案中创建背参照,该背参照可以由“替代”(Substitution)和“CondPattern”(CondPattern)引用。

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

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

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

  • 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”之间没有差异)。

'skip|S=num'

跳过下一个规则。

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

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

'env|E=VAR:VAL'

设置环境变量。

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

使用此标志可删除和记住URL中的信息。

注意

存储重写规则和检索重写规则共享变量值。 由于这种行为,当遇到并存储嵌入的URL时,您可以将变量设置为时间敏感的sessionid值。 当从临时存储列表检索下一个URL时,可以在检索该页面之前将最新的sessionid值添加到该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 是一个字符串,可以包含以下构造:

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

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

  • 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])将会话CGI参数的当前值指定给变量sessionid$1引用第一个反向引用,它包含在RewriteRule的Pattern ([^&#]+)中的第一组括号之间。

常规表达式^&#]+匹配单词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服务器项目(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 可以是应用于当前URL的POSIX常规表达式。“当前URL”可能与原始请求的URL不同,因为之前的规则可能已经匹配和更改了URL。

请参阅常规表达式

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

注意

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

可以使用括号在图案中创建背参照,该背参照可以由“替代”(Substitution)和“CondPattern”(CondPattern)引用。

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

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

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

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

  • 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​中的所有字符都为大写。
  • 转义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”之间没有差异)。

'skip|S=num'

跳过下一个规则。

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

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

'env|E=VAR:VAL'

设置环境变量。

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

使用此标志可删除和记住URL中的信息。

注意

存储重写规则和检索重写规则共享变量值。 由于这种行为,当遇到并存储嵌入的URL时,您可以将变量设置为时间敏感的sessionid值。 当从临时存储列表检索下一个URL时,可以在检索该页面之前将最新的sessionid值添加到该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 是一个字符串,可以包含以下构造:

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

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

  • 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])将会话CGI参数的当前值指定给变量sessionid$1引用第一个反向引用,它包含在RewriteRule的Pattern ([^&#]+)中的第一组括号之间。

常规表达式^&#]+匹配单词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服务器项目(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内容中遇到的标题存储在搜索索引中之前如何重写这些标题。

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

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

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

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

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

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

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

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

  • 重写规则反向引用

    这些匹配返回相应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​中的所有字符都为大写。
注意

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

标志 (可选)

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

标志

描述

'last|L'

最后一条规则。

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

'next|N'

下一轮。

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

'chain|C'

用下一条规则链接。

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

'nocase|NC'

没有。

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

'skip|S=num'

跳过下一条规则。

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

'env|E=VAR:VAL'

设置环境变量。

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

RewriteCond指令(可选)

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

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

RewriteCond TestString CondPattern [Flags] 

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

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

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

  • RewriteRule反向引用这些匹配反向引用在相应的RewriteRule模式中,其格式为$N(0 <= N <= 9)。 例如,RewriteRule ^My[[:blank:]] (.*)$ ${toupper: $1}
  • RewriteCond Back引用在上次匹配的RewriteCond CondPattern中这些匹配的反向引用,其格式为%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服务器项目(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规则可以包含两个主要元素:重写规则和可选的重写条件。 当将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时,您不能使用否定的模式。

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

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

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

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

RewriteRule反向引用这些匹配反向引用在相应的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编码的字符都转换回单个字符。
注意

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

标志 (可选)

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

标志

描述

'last|L'

最后一条规则。

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

'next|N'

下一轮。

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

'chain|C'

用下一条规则链接。

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

'nocase|NC'

没有。

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

'skip|S=num'

跳过下一条规则。

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

'env|E=VAR:VAL'

设置环境变量。

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

请注意,存储重写规则和检索重写规则共享变量值。 因此,在遇到并存储嵌入的URL时,可以将变量设置为时间敏感的会话id值。 当从临时存储列表检索下一个URL时,可以在检索该页面之前将最新的sessionid值添加到该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 是一个字符串,可以包含以下构造:

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

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

  • 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参数传递,后跟第二个反向引用)重写URL。($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服务器项目(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]

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

请参阅常规表达式

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

可以使用括号创建反向引用,后向引用可由“替代”和“条纹”引用。

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

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

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

  • RewriteRule Backreferences这些匹配RewriteRule模式中的反向引用,其格式为$N(0) <>例如,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​中的所有字符都为大写。

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

标志 (可选)

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

标志

描述

'last|L'

最后一条规则。

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

'next|N'

下一轮。

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

'chain|C'

用下一条规则链接。

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

'nocase|NC'

没有。

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

'skip|S=num'

跳过下一条规则。

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

'env|E=VAR:VAL'

设置环境变量。

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

RewriteCond指令(可选)

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

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

RewriteCond TestString CondPattern [Flags]

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

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

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

  • 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编码的字符都转换回单个字符。

有一个特殊的替换字符串:“ — ”表示“NO替换”。 “ — ”字符串通常与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服务器项目(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页面上,执行下列任一操作:

在此页面上

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now