.htaccess 第301章:如何重定向所有网址到HTTPS除了垃圾网址与特定字符?

sirbozc5  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(130)

我在一个月前发布了一个问题,答案很棒(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与特定的字符/字符串页面。

irlmq6kh

irlmq6kh1#

只是颠倒规则的顺序,让阻塞指令排在第一位(这是应该的)。
也不需要重复RewriteEngine指令。
您不应该使用THE_REQUEST服务器变量(在您使用它的上下文中,它可能匹配太多),而应该只使用RewriteRule * pattern *(或者甚至将规则组合成一个)。
例如:

RewriteEngine On

# Blocking the following requests
RewriteCond %{QUERY_STRING} ^vn/ [NC]
RewriteRule ^ - [R=410]

RewriteRule /webhook\.php$ - [NC,R=410]

RewriteRule /football\.php$ - [NC,R=410]

# Canonical redirect
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

还请注意,我将上一个规则中的正则表达式^.*$简化为^
这3个阻止规则可以合并为一个(但这样做并没有任何好处)。例如:

# Blocking the following requests (combined rule)
RewriteCond %{QUERY_STRING} ^vn/ [OR,NC]
RewriteCond %{REQUEST_URI} /webhook\.php$ [OR,NC]
RewriteCond %{REQUEST_URI} /football\.php$ [NC]
RewriteRule ^ - [G]

# Canonical redirect
:

注意:Ggone)只是R=410的简写。
一般来说,指令的顺序应该是:
1.阻塞指令
1.外部重定向
1.内部重写
错了,今天垃圾网址有一个301代码,然后是一个410代码
虽然这并不重要,除了它可能会使用极少量的额外资源,但它最终仍然是一个410。

相关问题