网站爬虫持续抓取不存在的URL,疑与.htaccess配置有关
问题分析与.htaccess修正方案
你的.htaccess配置存在多处问题,可能间接导致爬虫抓取错误URL,或让无效URL返回非404状态码,使爬虫误判为有效页面。以下是具体问题和修正后的配置:
配置中的问题点
重复开启RewriteEngine
多次声明RewriteEngine On完全冗余,只需在配置开头启用一次即可。规则顺序错误
重定向规则(域名跳转、WWW移除、HTTPS强制、HTML后缀移除)应优先于内部重写规则执行,否则可能触发不必要的请求循环或错误重写。缺少L标志引发规则串执行
添加.php后缀的规则未加L标志,会导致请求继续匹配后续规则,可能引发意外行为。路由规则语法错误
最后一条路由规则中page==$1多了一个等号,应为page=$1。路由规则未终止匹配
两条detail.php路由规则未加L标志,若后续新增规则可能引发冲突。
修正后的.htaccess配置
RewriteEngine On # 跳转otherexample.com至example.com RewriteCond %{HTTP_HOST} ^otherexample.com$ [OR] RewriteCond %{HTTP_HOST} ^www.otherexample.com$ RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] # 移除www前缀 RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # 强制HTTPS访问 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 移除.html后缀(301重定向) RewriteRule ^(.*)\.html$ /$1 [R=301,L] # 内部重写:自动添加.php后缀(仅当目标文件存在时) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L] # 路由单个路径段至detail.php RewriteRule ^([a-zA-Z0-9_-]+)$ detail.php?page=$1 [L] RewriteRule ^([a-zA-Z0-9_-]+)/$ detail.php?page=$1 [L] # 禁止外部访问.htaccess文件 <Files .htaccess> Order allow,deny Deny from all </Files>
额外关键提示
爬虫抓取example.com/its-confusing/about-me这类无效URL的核心原因,大概率是网站内链接使用了相对路径而非绝对路径。例如在example.com/its-confusing页面中,若链接写为<a href="about-me">,浏览器会自动解析为当前路径下的子链接,即example.com/its-confusing/about-me,而非正确的根路径链接example.com/about-me。请检查全站链接,确保使用以/开头的绝对路径或完整URL。
内容的提问来源于stack exchange,提问作者Noob Laner
相关产品推荐
相关产品推荐

