Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dispatcher regex匹配大小写,然后将url的部分内容更改为小写_Regex_Apache_Adobe_Aem_Dispatcher - Fatal编程技术网

dispatcher regex匹配大小写,然后将url的部分内容更改为小写

dispatcher regex匹配大小写,然后将url的部分内容更改为小写,regex,apache,adobe,aem,dispatcher,Regex,Apache,Adobe,Aem,Dispatcher,假设我有一个产品页/GB/en/cat/product/abc/cde/***是一个有效的200页, 但人们可能会意外地键入/GB/en/cat/Product/abc/cde/***或/GB/en/cat/Product/abc/cde/***(因为我的内容页区分大小写),这两个url会导致我的搜索引擎优化问题 因此,我需要在dispatcher中具有重写规则,以处理类似于/GB/en/cat/Product/abc/cde/***或/GB/en/cat/Product/abc/cde/***

假设我有一个产品页
/GB/en/cat/product/abc/cde/***
是一个有效的200页,
但人们可能会意外地键入
/GB/en/cat/Product/abc/cde/***
/GB/en/cat/Product/abc/cde/***
(因为我的内容页区分大小写),这两个url会导致我的搜索引擎优化问题 因此,我需要在dispatcher中具有重写规则,以处理类似于
/GB/en/cat/Product/abc/cde/***
/GB/en/cat/Product/abc/cde/***
的任何事情,并将它们传输到
/GB/en/cat/Product/abc/cde/***

RewriteCond %{ENV:PAGE_REQUEST} ^true$
  RewriteCond %{REQUEST_URI} !^/[A-Z]{2}/[a-z]{2}
  RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]
下面是我当前的试用版,但只有当用户在
/gb/en/cat/Product/…
/gb/en/cat/Product/…
中键入时,它才能成功更改为
/gb/en/cat/Product/abc/cde/***

RewriteCond %{ENV:PAGE_REQUEST} ^true$
  RewriteCond %{REQUEST_URI} !^/[A-Z]{2}/[a-z]{2}
  RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]
如果用户在
/GB/en/cat/PRODUCT/…
中键入,则重写规则将不起作用。。。 任何代码建议都将受到欢迎。
谢谢

您的第二个重写条件限制了规则:

RewriteCond %{REQUEST_URI} !^/[A-Z]{2}/[a-z]{2}

第二个重写条件限制了规则:

RewriteCond %{REQUEST_URI} !^/[A-Z]{2}/[a-z]{2}

正如弗拉德所说:你的第二个条件将限制规则,只有当两个条件都满足时,规则才会被应用。第二个条件是,仅当URI不是以两个大写字符开头,后跟两个小写字符时才应用规则。因此,
/GB/en/cat/PRODUCT/…
将不匹配,因为不满足第二个条件。这意味着该规则不适用,且大写的
产品
不固定。您可以删除第二个条件,因为您的规则不会更改正确的大小写字符

正如rakhi4110所说,重写规则中的第三个组:
(.*)
将在语言的两个字母后包含/,因此如果您以
/${tolower:$3}
结束规则,您将在URI中得到两个斜杠,以修复您可以删除结尾处的斜杠,或在第2组和第3组之间添加一个:

RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]

(国际海事组织第一个是清洁守则)

因此,总而言之,以下几点应该有效:

RewriteCond %{ENV:PAGE_REQUEST} ^true$
RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]

正如弗拉德所说:你的第二个条件将限制规则,只有当两个条件都满足时,规则才会被应用。第二个条件是,仅当URI不是以两个大写字符开头,后跟两个小写字符时才应用规则。因此,
/GB/en/cat/PRODUCT/…
将不匹配,因为不满足第二个条件。这意味着该规则不适用,且大写的
产品
不固定。您可以删除第二个条件,因为您的规则不会更改正确的大小写字符

正如rakhi4110所说,重写规则中的第三个组:
(.*)
将在语言的两个字母后包含/,因此如果您以
/${tolower:$3}
结束规则,您将在URI中得到两个斜杠,以修复您可以删除结尾处的斜杠,或在第2组和第3组之间添加一个:

RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]

(国际海事组织第一个是清洁守则)

因此,总而言之,以下几点应该有效:

RewriteCond %{ENV:PAGE_REQUEST} ^true$
RewriteRule ^/([a-zA-Z]{2})/([a-zA-Z]{2})/(.*) "/${toupper:$1}/${tolower:$2}/${tolower:$3}" [R=301,L]

在这里快速猜测一下。规则中可能缺少“/”?您是否尝试过
RewriteRule^/([a-zA-Z]{2})/(.*)/{toupper:$1}/${tolower:$2}/${tolower:$3}”[R=301,L]
在这里快速猜测。规则中可能缺少“/”?您尝试过
RewriteRule^/([a-zA-Z]{2}/{tolower 2}/{tolower[R=301,L]