.htaccess - 修复格式错误的 url

问题描述 投票:0回答:1

我需要一个解决方案。出于某种原因,过去似乎我只为机器人生成了一些“坏”链接。

Resume:当存在格式错误的 url 时,有一个假的“页面”参数。当有 2 个“页面”参数时,第一个是假的,必须删除。

  1. X 是随机的
  2. 仅在检测到“?/?page”时移除参数页

好: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]
.htaccess url parameters malformed
1个回答
1
投票
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
(我假设这是你在这里想要的,因为没有实际的页面参数要保留,对吗?)

© www.soinside.com 2019 - 2024. All rights reserved.