我在一个月前发布了一个问题,答案很棒(HTACCESS 403:如何阻止带有特定字符的URL?):HTACCESS 403 : How to block url with a specific character?
问题是,我迁移我的网站HTTP到HTTPS,我想重定向所有的网址,除了垃圾网址与特定的字符,我会阻止410代码。
举例说明我想说的:
http://www.example.com/caterory/article-name/?vn/2022-06-24fivhg585.html ==> 410 code, without 301 to HTTPS
http://www.example.com/caterory/article-name/webhook.php?tw3fpage3rjnso530724 ==> 410 code, without 301 to HTTPS
http://www.example.com/caterory/article-name/football.php?fsmkfpagefgdg456 ==> 410 code, without 301 to HTTPS
错了,今天垃圾网址有一个301代码,然后是一个410代码
x一个一个一个一个x一个一个二个一个x一个一个三个一个
我用这些规则:
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]
你有一个想法来管理301重定向除了URL与特定的字符/字符串页面。
1条答案
按热度按时间irlmq6kh1#
只是颠倒规则的顺序,让阻塞指令排在第一位(这是应该的)。
也不需要重复
RewriteEngine
指令。您不应该使用
THE_REQUEST
服务器变量(在您使用它的上下文中,它可能匹配太多),而应该只使用RewriteRule
* pattern *(或者甚至将规则组合成一个)。例如:
还请注意,我将上一个规则中的正则表达式
^.*$
简化为^
。这3个阻止规则可以合并为一个(但这样做并没有任何好处)。例如:
注意:
G
(gone
)只是R=410
的简写。一般来说,指令的顺序应该是:
1.阻塞指令
1.外部重定向
1.内部重写
错了,今天垃圾网址有一个301代码,然后是一个410代码
虽然这并不重要,除了它可能会使用极少量的额外资源,但它最终仍然是一个410。