我需要一个解决方案。出于某种原因,过去似乎我只为机器人生成了一些“坏”链接。
Resume:当存在格式错误的 url 时,有一个假的“页面”参数。当有 2 个“页面”参数时,第一个是假的,必须删除。
好:search?pagepage=496
差:search?/?page=X
好:https://example.com/search?page=496
好:https://example.com/search?page=496&orderBy=oldest
坏:https://example.com/search?/?page=X&page=496&orderBy=oldest
RewriteCond %{QUERY_STRING} ^(.*)&?^XXX[^&]+&?(.*)$ [NC]
RewriteRule...
谢谢你们!
更新
最后,我自己找到了解决方案:
RewriteCond %{QUERY_STRING} ^(.*)&?^/\?page=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /search$1?%1%2 [R=301,L]
RewriteCond %{QUERY_STRING} ^/\?page=.+&(page=.*)
RewriteRule ^(search)$ $1?%1 [R=301]
这将对所有具有您要保留的额外
page
参数的网址进行重写。
要使最后一部分可选,我们必须将
&(page=.*)
包装到另一组大括号中,并添加一个 ?
作为量词 - (&(page=.*))?
。
然后需要将反向引用从 %1
更改为 %2
(因为我们只需要那个内部部分,我们不需要 &
) - 但是对于没有任何真正的 page
参数的 URL keep,这个地方没有匹配项,因此%2
不会被替换为任何东西,而是添加到URLliterally.
最好保留上面的原样,然后简单地添加
RewriteCond %{QUERY_STRING} ^/\?page=.+
RewriteRule ^(search)$ $1 [QSD,R=301]
在现有的两条线下方。该模式不需要更具体(因为在末尾具有真正的
page
参数的 URL 已经由前两行处理。)并且 QSD
使其简单地删除现有的查询字符串,所以 https://example.com/search?/?page=20
结果是 https://example.com/search
(我假设这是你在这里想要的,因为没有实际的页面参数要保留,对吗?)