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]