如何用.htaccess将所有URL重定向到HTTPS,仅对垃圾URL返回410
调整HTACCESS规则:垃圾URL直接返回410,其余强制HTTPS重定向
需求说明
网站已从HTTP迁移至HTTPS,需实现以下逻辑:
- 所有正常URL强制301重定向到HTTPS
- 包含特定特征的垃圾URL直接返回410状态码,不触发HTTPS跳转
预期效果
http://www.example.com/caterory/article-name/?vn/2022-06-24fivhg585.html ==> 返回410,不跳转至HTTPS http://www.example.com/caterory/article-name/webhook.php?tw3fpage3rjnso530724 ==> 返回410,不跳转至HTTPS http://www.example.com/caterory/article-name/football.php?fsmkfpagefgdg456 ==> 返回410,不跳转至HTTPS
当前问题
垃圾URL会先触发301跳转至HTTPS,再返回410状态码,不符合预期:
http://www.example.com/caterory/article-name/?vn/2022-06-24fivhg585.html ==> 301至https://www.example.com/caterory/article-name/?vn/2022-06-24fivhg585.html,再返回410 http://www.example.com/caterory/article-name/webhook.php?tw3fpage3rjnso530724 ==> 301至https://www.example.com/caterory/article-name/webhook.php?tw3fpage3rjnso530724,再返回410 http://www.example.com/caterory/article-name/football.php?fsmkfpagefgdg456 ==> 301至https://www.example.com/caterory/article-name/football.php?fsmkfpagefgdg456,再返回410
当前使用的规则
RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [L,NE,R=301] RewriteEngine On RewriteCond %{QUERY_STRING} ^vn/ [NC] RewriteRule ^ - [R=410] RewriteEngine On RewriteCond %{THE_REQUEST} /webhook.php [NC] RewriteRule ^ - [R=410] RewriteEngine On RewriteCond %{THE_REQUEST} /football.php [NC] RewriteRule ^ - [R=410]
解决方案
核心逻辑:将返回410的规则放在HTTPS重定向规则之前。Apache的Rewrite规则按从上到下顺序执行,匹配到410规则后用[L]标记终止后续处理,直接返回状态码,避免触发HTTPS跳转。同时无需重复声明RewriteEngine On,仅开头声明一次即可。
修改后的完整规则:
RewriteEngine On # 优先处理垃圾URL,直接返回410 RewriteCond %{QUERY_STRING} ^vn/ [NC] RewriteRule ^ - [L,R=410] RewriteCond %{THE_REQUEST} /webhook.php [NC] RewriteRule ^ - [L,R=410] RewriteCond %{THE_REQUEST} /football.php [NC] RewriteRule ^ - [L,R=410] # 处理HTTPS和www的强制重定向 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
规则说明
- 410规则前置:优先匹配垃圾URL特征,匹配成功后终止后续规则执行,直接返回410,跳过HTTPS重定向步骤。
- 精简冗余配置:
RewriteEngine On仅需开头声明一次,重复声明属于冗余代码。 - 保留精准匹配:垃圾URL的匹配条件(QUERY_STRING、THE_REQUEST)保持不变,确保准确拦截目标垃圾链接。
内容的提问来源于stack exchange,提问作者Arnaud
相关产品推荐
相关产品推荐

