今天同事发给我2个url地址,说url地址被百度收录了,由于用的是tp5.1的框架发现框架与原生会当get参数解析。

截止20230628之前的tp\5.1.42,6.1.3是都有这个问题的

2个网址是可以打开的

整体来说是一个不那么正规的带get参数的请求,框架给解析了

解析结果

这样有个麻烦就造成了:人能看懂是个带有get参数的url路径,但是搜索引擎认为这个一个url是一个资源。

解决办法:改成以&符号为开头的uri不解析

if (!-e $request_filename) rewrite ^/(?!&)(.*)$ /index.php?s=$1 last;

在原来的 rewrite ^/(.*)$ /index.php?s=$1 last; 的技术上添加了(?!&)

在正则表达式中,负向零宽断言(negative lookahead assertion)是一种特殊的语法结构,用于在匹配过程中排除某些模式。它用于查找不满足某种条件的位置,而不进行实际的匹配。

负向零宽断言使用 (?!pattern) 的语法形式,其中 pattern 是一个正则表达式模式。它表示在当前位置后面不应该存在与 pattern 匹配的内容。如果断言成功,则继续匹配;如果断言失败,则继续尝试下一个位置。

在上述场景中,以 "&" 符号开头的请求路径。因此,可以使用负向零宽断言来实现,即 (?!&)。这样,正则表达式引擎会检查请求路径后面的字符,确保它不以 "&" 符号开头,然后才进行重写操作。

如果是不以&和/号开头可以这么写

(?!&|\/)

/需转义

Last modification:August 1, 2023
如果觉得我的文章对你有用,请随意赞赏