通过htaccess(mod_rewrite)重定向带双斜杠的错误URL至410页面的问题
解决以
abc//开头的错误URL返回410状态码的问题 问题原因
Apache默认会通过mod_dir模块自动规范化URL,将多个连续斜杠合并为单个斜杠。这意味着当请求到达RewriteRule规则时,/abc//xxx/yyy已经被处理成/abc/xxx/yyy,所以你之前写的带双斜杠的匹配规则根本找不到对应的请求。
正确解决方案
利用%{THE_REQUEST}变量匹配原始请求——这个变量保存的是浏览器发送的原始请求行(比如GET /abc//xxx/yyy HTTP/1.1),不会被Apache规范化,能准确捕捉到带双斜杠的错误URL。
方案1:直接返回410状态码(推荐)
不需要跳转至PHP页面,直接让服务器返回410状态,更符合HTTP规范:
# 匹配所有以/abc//开头的请求,返回410 Gone状态码 RewriteCond %{THE_REQUEST} \s/abc//[^\s]+ RewriteRule ^abc/ - [R=410,L]
方案2:跳转到自定义410页面
如果需要展示自定义的410页面内容,使用以下规则:
# 匹配所有以/abc//开头的请求,跳转到自定义410页面 RewriteCond %{THE_REQUEST} \s/abc//[^\s]+ RewriteRule ^abc/ 410_page_deleted.php [END,NC]
规则说明
%{THE_REQUEST} \s/abc//[^\s]+:匹配原始请求中包含/abc//的部分,确保只针对错误URL生效RewriteRule ^abc/:匹配规范化后的路径(此时双斜杠已合并为单斜杠),触发后续操作[R=410,L]:返回410状态码并终止规则处理;[END,NC]:跳转到指定页面,忽略大小写且终止后续规则
内容的提问来源于stack exchange,提问作者Phantom
相关产品推荐
相关产品推荐

