共计 789 个字符,预计需要花费 2 分钟才能阅读完成。
在使用 Byte 服务商提供的免费空间建站时,可能会随机遇到网址最后带有“?i=1”这样的访问参数,其初衷是保护网站免受恶意机器人的攻击,但这样的保护方式不仅影响美观,有时还会干扰正常的页面访问以及 CDN 服务的使用,这个问题也困扰了我仅十年。今天在 NL 论坛发现已经有教程可以去掉 ”?i=1″ 的后缀了。

具体实现方式为将下述代码添加到主机根目录的.htaccess 文件中(如果.htaccess 文件不存在,就手动创建一个):
RewriteEngine On RewriteCond %{QUERY_STRING} (^|&)i=[0-9]+(&|$) [NC] RewriteRule ^(.*)$ /$1? [R=301,L]
这段代码的作用原理是:RewriteCond %{QUERY_STRING} (^|&)i=[0-9]+(&|$) [NC]是一个重写条件,它会获取当前请求的查询字符串,也就是 URL 中问号后面的部分,然后通过正则表达式判断其中是否存在以“i=”开头,后面跟着一个或多个数字,最后以“&”结尾或者到字符串末尾的内容,并且 [NC] 表示不区分大小写匹配。RewriteRule ^(.*)$ /$1? [R=301,L]是重写规则,它会将匹配到的内容作为新的 URL 路径,并在末尾添加一个问号,从而去除原查询字符串。[R=301,L]中,R=301 表示返回 301 永久重定向状态码,告诉浏览器请求的资源已永久移动到新的 URL;L 表示这是最后一条规则,当这条规则匹配时,不再处理后续的重写规则。
完整版.htaccess 内容参考如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)i=[0-9]+(&|$) [NC]
RewriteRule ^(.*)$ /$1? [R=301,L]
</IfModule>
来源:NL 论坛