Apache默认在当前目录下没有 index.html 入口文件就会显示网站根目录,让网站根目录文件全部暴露出来,是一件非常危险的事。

例如:客户可以直接打开文件,看到源代码、数据库密码、隐藏页面等,泄露了一些保密文件,会引起非常严重安全问题!

例如,访问米扑网站根目录: https://mimvp.com    会列出根目录

apache-setting-prohibit-access-to-the-site-directory

 

本文将详细介绍如何操作禁止显示apache网站根目录

进入apache的配置文件 httpd.conf 找到:

vim /etc/httpd/conf/httpd.conf

Options Indexes FollowSymLinks

修改为:

Options FollowSymLinks

修改后结果如下:

<Directory "/var/www/html">
 #    Options None                        

 #    Options Indexes FollowSymLinks
     Options FollowSymLinks

     AllowOverride All
     Order allow,deny
     Allow from all
</Directory>

如上,将Indexes去掉,Indexes表示若当前目录没有index.html就会显示目录结构

重启Apache服务器  /etc/init.d/httpd restart

再访问米扑网站,就没问题了: https://mimvp.com

 

准备知识点

AllowOverride参是指明Apache服务器是否去找.htacess文件作为配置文件

如果设置为none,那么服务器将忽略.htacess文件,可能导致全部 http 无法跳转到 https

如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。

 

 

1. 禁止访问某些文件/目录文件后缀

增加Files选项来控制,比如不允许访问 .inc 扩展名的文件,保护php类库:

<Files ~ ".inc$">
     Order allow,deny
     Deny from all
</Files>

 

通过文件匹配来进行禁止(文件后缀

比如禁止所有针对图片的访问:

<FilesMatch .(?i:gif|jpeg|png)$>
     Order allow,deny
     Deny from all
</FilesMatch>

 

禁止访问某些指定的目录(绝对路径

可以用 <DirectoryMatch>   来进行正则匹配)

<Directory ~ "^/var/www/(.+/)*[0-9]{3}">
     Order allow,deny
     Deny from all
</Directory>

 

针对URL相对路径的禁止访问(相对路径

<Location /dir/>
     Order allow,deny
     Deny from all
</Location>

 

针对代理方式禁止对某些目标的访问

(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问mimvp.com

<Proxy http://mimvp.com/*>
   Order allow,deny
   Deny from all
</Proxy> 

 

配置示例

<Directory "E:/Program Files/Apache Software Foundation/Apache2.2/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
# 就是这一行,只去掉indexes也可

#Options Indexes FollowSymLinks
Options FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>

建议默认情况下,设置APACHE禁止用户浏览目录内容。

 

 

2. Apache拦截HTTP请求

有些时候,为了保证Web网站的安全性,将Apache服务器中一些危险的HTTP请求过滤掉

例如过滤掉禁止 PUT、DELETE 等请求方法,也可以让系统不作处理的无效请求过滤,例如TRACE、OPTIONS请求,以防入侵者发送大量请求给服务器,造成系统负担。

Apache服务器可以通过修改http.conf文件来达到上述目的,Apache核心指令中:

<Limit>/<LimitExcept>配置段用于对指定的HTTP方法GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE)进行访问控制

<Directory>/<Files>/<Location>配置段则是用于将它们封装起来的指令集作用于指定的目录、文件或网络空间。

因此,将<Limit>/<LimitExcept>配置段和<Directory>/<Files>/<Location>配置段联合起来,就能实现Apache对指定HTTP请求进行访问控制的功能。

它们的配置形式(以<Directory>和<Limit>/<LimitExcept>说明)可以表示如下:

<Directory "/var/www/html">  
<Limit DELETE TRACE OPTIONS>  
    #禁止DELETE TRACE OPTIONS请求  
    Order allow,deny  
    Deny from all  
</Limit>  
</Directory>  

上述配置表示,对于任何用 DELETE、TRACE、OPTIONS 方法访问 /var/www/html 目录里资源文件的请求都会被apache服务器拒绝(403 Fobidden)。

还可以这样表示:

<Directory "/var/www/html">  
<LimitExcept GET POST HEAD>  
    #禁止除GET POST HEAD以外的请求  
    Order allow,deny  
    Deny from all  
</Limit>  
</Directory>  

这段配置表示,对于任何用 GET、POST、HEAD 方法访问 /var/www/html 目录里资源文件的请求都会被apache服务器拒绝(403 Fobidden)。

相当于前一个(<Limit>)是黑名单策略,后一个(<LimitExcept>)是白名单策略。

关于这段配置有两点需要注意的地方:

1、配置完httpd.conf文件后,必须重启apache服务,配置才能生效。

2、<Limit>/<LimitExcept>配置段里的Order、Allow、Deny指令需加载 mod_authz_host.so 模块,否则无法使用

 

 

3. Apache Rewrite url 重定向功能的简单配置

Rewrite url重定向就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。

平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链,防特定资源攻击(如高并发访问mp3、video、图片等大资源文件)等

1)Apache Rewrite 配置方式

Apache下的Rewrite配置主要有两种

1、一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接在 httpd.conf 下书写。

配置步骤如下: 

(1) 去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号; 

(2) 然后再在httpd.conf中书写如下规则: 

RewriteEngine on 

RewriteRule ^/t_(.*).html$ /test.php?id=$1 

#当访问任何以t_开头,以.html结尾的文件时,将用 $1与(.*)匹配的字符替换后,访问相应的test.php页面 

 

 

2、另一种是针对apache服务器下的某一目录的配置,此种配置的Rewrite规则需在此目录下建立一个.htaccess文件来书写。

配置步骤如下: 

(1) 去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号; 

(2) 修改httpd.conf文件中的"AllowOverride None"为"AllowOverride all",同时最好将Options也置为"all",否则可能会出问题。 

(3) 在目录中建立.htaccess文件,并用记事本打开,书写如下规则: 

RewriteEngine on 
RewriteRule ^/
t_(.*).html$ /test.php?id=$1 

 

2)Apache Rewrite 规则的书写 

RewriteEngine on 
RewriteRule ^/test([0-9]*).html$ /test.php?id=$1           // 以test开头、.html结尾的URL,[0-9]*匹配到$1
RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R] 

# 当我们访问的地址不是以www.mimvp.com开头的,那么执行下一条规则 

# NC是指在匹配时,不区分大小写,因为在Apache本身对大小写是敏感的

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www.mimvp.com [NC] 
RewriteRule ^/(.*) http://www.mimvp.com/ [L] 

 

Apache 实现301永久性重定向的方法(推荐 RedirectMatch

Apache模块 mod_alias的 Redirect 和 RedirectMatch命令,2个命令使用方法相似。

区别是后者RedirectMatch基于正则表达式匹配对当前的URL发送一个外部重定向语法为:

Redirect [status] URL-path URL

RedirectMatch [status] regex URL

status参数可以使用以下HTTP状态码:

permanent     返回一个永久性重定向状态码(301),表示此资源的位置变动是永久性的。

temp            返回一个临时性重定向状态码(302),这是默认值。

seeother      返回一个“参见”状态码(303),表示此资源已经被替代。

gone            返回一个“已废弃”状态码(410),表示此资源已经被永久性地删除了。如果指定了这个状态码,则URL参数将被忽略。

举例:

Redirect 301 /old/old.htm http://www.mimvp.com/new.htm
Redirect permanent /one http://mimvp.com/two
RedirectMatch 301 (.*).gif$ http://www.mimvp.com/images/$1.jpg


使用mod_rewrite重写URL方式

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mimvp.com
RewriteRule ^(.*)$ http://www.mimvp.com/$1 [R=permanent,L]

上面配置含义,判断当前服务器变量HTTP_HOST是否等于mimvp.com

为真就进行重写,按照R=permanent进行永久重定向,L表示并立即停止重写操作,并不再应用其他重写规则

下面是最终实现的.htaccess文件,同时也并入wordpress重写规则:

# BEGIN Mimvp Blog
<IfModule mod_rewrite.c>
	RewriteEngine On

	#Redirect
	Options +FollowSymLinks
	RewriteCond %{HTTP_HOST}   ^mimvp.com$
	RewriteCond %{HTTP_HOST}   !^$
	RewriteRule ^(.*)$ http://www.mimvp.com/$1 [R=301,L]

	#Rewrite(blog)
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^blog/.* /blog/index.php [L]
	RewriteRule . -
</IfModule>
# END Mimvp Blog

 

3)Apache Rewrite 规则修正符 

1) R 强制外部重定向 
2) F 禁用URL,返回403HTTP状态码。 
3) G 强制URL为GONE,返回410HTTP状态码。 
4) P 强制使用代理转发。 
5)
L 表明当前规则是最后一条规则,停止分析以后规则的重写。 
6) N 重新从第一条规则开始运行重写过程。 
7) C 与下一条规则关联,继续匹配,跟L相反

如果规则匹配则正常处理,以下修正符无效 

8) T=MIME-type(force MIME type) 强制MIME类型 
9) NS 只用于不是内部子请求 
10)
NC 不区分大小写 
11) QSA 追加请求字符串 
12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1

 

4)Apache Rewrite 简单示例

示例1:重写URL

原始URL:https://blog.mimvp.com/p2066.html
重写URL:https://blog.mimvp.com/?p=2066

重写规则:

^p([0-9]+)\.html      /?p=$1     [L]

正则基础知识:

^ 匹配开始,匹配URL地址的开头部分,对于RewriteRule而言,域名(https://blog.mimvp.com)不是URL地址的一部分,如上:?p=2066
() 分隔一个被捕获的表达式,如上:([0-9]+)
[] 定义字符类,如上:[0-9] 表示从0-9之间的数字
+ 说明前面的字符可以被重复匹配1次或数次,如上:[0-9]+,表示任何数字组合,但不可为空
\ 字符转义,如上:转义小圆点.
[L] 表示last,匹配成功后就停止匹配其它

 

示例2:生成伪静态html

(1)生成伪静态html

在<VirtualHost>段最后加入

RewriteEngine on
RewriteRule /goods([0-9]+).html /goods.php?id=$1 [PT] 

更标准的写法为:

RewriteRule ^(.*)/goods([0-9]+).html$ $1/goods.php?id=$2 [PT]

更简洁的写法:

/goods(\d+)\.html /goods\.php\?id=$1

第一个(0-9]+)对应参数$1,以此类推第二个对应$2

举例:

RewriteRule /forum-([0-9]+)-([0-9]+)\.html /forumdisplay.php?fid=$1&page=$2 [PT]

测试https://blog.mimvp.com/goods1.html 是否与/goods.php?id=1的内容相同

最后将所有链接换成设置后的伪静态html地址方式

[PT]:url全局转换,即转换过的goods31.html对应goods.php?id=31 (默认就是这个不加参数)
[R]:    url重定向  即使用goods31.html访问时,跳转到goods.php?id=31

 

示例3:防盗链

RewriteCrond %{HTTP_HOST} !mimvp.com [R=301,L]
RewriteRule ^(.*)$ http://www.mimvp.com/warning.html [R=301,L]

把不是来自mimvp.com的请求重定向到http://www.mimvp.com

更好的做法:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?mimvp\.com/.*$ [NC]
RewriteRule \.(mp3|rar|jpe|gif)$ http://www.mimvp.com/warning.jpg [R=301,L]

改进示例:

## 防盗链
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^(.*)mimvp.com [NC]
RewriteCond %{HTTP_REFERER} !^(.*)baidu.com [NC]
RewriteCond %{HTTP_REFERER} !^(.*)sogou.com [NC]
RewriteCond %{HTTP_REFERER} !^(.*)so.com [NC]
RewriteCond %{HTTP_REFERER} !^(.*)bing.com [NC]
RewriteCond %{HTTP_REFERER} !^(.*)google.com [NC]
RewriteRule .*\.(png|gif|jpg|jpeg|bmp|swf|pdf|txt|zip|rar)$ /anti-link.jpg [L,NC]

根据 referer 判断,首先需要判断 referer 不能为空,否则直接访问都会被屏蔽(浏览器输入链接访问,referer为空,会被被屏蔽,需排除)

然后,判断是否属于米扑科技的域名(mimvp.com),若不是则屏蔽

接着,判断是否是主流的爬虫引擎,防止屏蔽掉一些做数据分析的野爬虫

最后,只对图片格式 (png|gif|jpg|jpeg|bmp|swf|pdf|txt|zip|rar) 做判断,防止的是图片盗链,节省带宽和流量

需注意,防盗链的图片大小最好压缩的更可能小,若防盗链图片很大,则没有防盗链的必要了(实际上还有有效果的,访问同一张盗链替代图和多张正文图)

需特别注意,RewriteRule .*\.(png|gif|jpg|jpeg|bmp|swf|pdf|txt|zip|rar)$ /anti-link.jpg [L,NC] 网上很多文章把这里的 [L,NC] 写成了 [R=permanent,L,NC] ,实际是错误的,后果很严重,为什么呢?因为 R=permanent 是 301 永久重定向,盗链图是用了替代图,可apache服务器设置了过期时间有缓存,正常访问原始文章url链接或原图,也会被 301 永久重定向到盗链替换图,严重影响了正常访问,因此这里特别需要注意,只能采用  [L,NC] 

米扑博客的防盗链实战示例:

CSDN 转载链接:https://blog.csdn.net/ithomer/article/details/74034673 (会出现 404 盗链错误提示,显示盗链替换图)

米扑博客原链接:https://blog.mimvp.com/article/18481.html (会正常实现图片)

测试时,有些需要强制清空浏览器缓存,防止浏览器 304 状态码的本地缓存的影响

 

 

示例4:防百度爬虫

RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [OR]
RewriteRule ^(.*)$ http://www.google.com [R=301,L]

把来自百度的爬虫转到google

改进示例:

禁止不常见爬虫蜘蛛,他们之间不区分大小且关系是或[NC,OR],强制跳转到米扑科技首页(https://mimvp.com

## 禁用不常见的爬虫蜘蛛
RewriteCond   %{HTTP_USER_AGENT} ^(.*)SemrushBot [NC,OR]
RewriteCond   %{HTTP_USER_AGENT} ^(.*)AhrefsBot [NC,OR]
RewriteCond   %{HTTP_USER_AGENT} ^(.*)DotBot [NC,OR]
RewriteCond   %{HTTP_USER_AGENT} ^(.*)MJ12bot [NC]
RewriteRule   ^(.*)$  https://mimvp.com/$1 [R=permanent,L]

 

5)Apache Rewrite 应用实例

a) httpd.conf 

# blog.mimvp.com
<VirtualHost *:80>
	RewriteEngine on
	#RewriteRule   ^(.*)mimvp-proxy-lastest-free-proxy-ip  https://mimvp.com [L,R]
	RewriteRule   ^(.*)mimvp-proxy-lastest-free-proxy-ip  https://mimvp.com [R=permanent,L]
	RewriteRule   ^(.*)phpmyadmin  https://mimvp.com [R=permanent,L]

	ServerAdmin abc123@mimvp.com
	DocumentRoot /var/www/html/mimvp-blog
	ServerName blog.mimvp.com

	RewriteEngine on
	RewriteCond   %{HTTPS} !=on 
	RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [R=permanent,L]

	DirectoryIndex index.php 
	ErrorLog /var/log/blog.mimvp.com-error_log
	CustomLog /var/log/blog.mimvp.com-access_log customlog
</VirtualHost>

<VirtualHost *:443>
    RewriteEngine On

    ## 禁用已失效或不存在的网页路径
    RewriteRule   ^/html5  https://mimvp.com/$1 [R=permanent,L]
    RewriteRule   ^/phpmyadmin(.*)$  https://mimvp.com [R=permanent,L]
    RewriteRule   ^(.*)mimvp-proxy-lastest-free-proxy-ip  https://mimvp.com [R=permanent,L]
#    RewriteRule   ^/?p=([0-9]*)  /article/$1.html [R=permanent,L]    

    ## 禁用不常见的爬虫蜘蛛
    RewriteCond   %{HTTP_USER_AGENT} ^(.*)SemrushBot [NC,OR]
    RewriteCond   %{HTTP_USER_AGENT} ^(.*)AhrefsBot [NC,OR]
    RewriteCond   %{HTTP_USER_AGENT} ^(.*)DotBot [NC,OR]
    RewriteCond   %{HTTP_USER_AGENT} ^(.*)MJ12bot [NC]
    RewriteRule   ^(.*)$  https://mimvp.com/$1 [R=permanent,L]

    ## 防盗链
    RewriteCond %{HTTP_REFERER} !^$ [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)mimvp [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)mimvp.com [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)mimgu.com [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)mimji.com [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)baidu.com [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)sogou.com [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)so.com [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)bing.com [NC]
    RewriteCond %{HTTP_REFERER} !^(.*)google.com [NC]
    RewriteRule .*\.(png|gif|jpg|jpeg|bmp|swf|pdf|txt|zip|rar)$ /anti-link.jpg [L,NC]

    SSLEngine on
    SSLCertificateChainFile /etc/httpd/conf/1_blog_root_bundle.crt
    SSLCertificateFile /etc/httpd/conf/2_blog.mimvp.com.crt
    SSLCertificateKeyFile /etc/httpd/conf/3_blog.mimvp.com.key

    ServerAdmin abc123@mimvp.com
    DocumentRoot /var/www/html/mimvp-blog
    ServerName blog.mimvp.com

    DirectoryIndex index.php index.html index.htm
    ErrorLog /var/log/blog.mimvp.com-error_log
    CustomLog /var/log/blog.mimvp.com-access_log customlog
</VirtualHost>

 

b).htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule>
# END WordPress

改进型

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On

# Redirect
Options +FollowSymLinks
RewriteCond %{HTTP_HOST}   !^(.*)mimvp\.com(.*)$ [NC]
RewriteRule ^(.*)$ https://blog.mimvp.com/$1 [R=301,L]

# Rewrite(blog)
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>


<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresDefault A600 
ExpiresByType image/x-icon A2592000 
ExpiresByType image/gif A2592000 
ExpiresByType image/jpeg A2592000 
ExpiresByType image/png A2592000 
ExpiresByType text/css A604800 
ExpiresByType text/plain A86400
ExpiresByType application/x-shockwave-flash A2592000
ExpiresByType application/x-javascript A604800 
ExpiresByType video/x-flv A2592000 
ExpiresByType application/pdf A2592000 
ExpiresByType text/html A600 
</IfModule> 

# END WordPress

参数解释:

知识点一:

# Redirect
Options +FollowSymLinks
RewriteCond %{HTTP_HOST}   !^(.*)mimvp\.com(.*)$ [NC]
RewriteRule ^(.*)$ https://blog.mimvp.com/$1 [R=301,L]

访问url链接里不包含 mimvp.com 字符串(NC表示不区分大小写),视为被恶意域名解析,强制跳转到米扑博客首页,$1 参数不变

 

知识点二:

# Rewrite(blog)
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

若访问不是首页 RewriteRule ^index\.php$ - [L] ,则进行判断:

RewriteCond %{REQUEST_FILENAME} !-f 表示请求url路径,若不是文件 !-f

RewriteCond %{REQUEST_FILENAME} !-d 表示请求url路径,且不是目录 !-d ( RewriteCond 默认是并,若是或则用[OR] )

RewriteRule . /index.php [L] 表示跳转到首页,配合 wordpress 设置里的“固定链接”配置,可以实现 php 静态化为 html

例如:米扑博客的静态链接 https://blog.mimvp.com/article/12259.html  ,其真实的动态链接为 https://blog.mimvp.com/?p=12259

 

 

4. 封禁某些IP访问/只允许某些IP访问网站

如果要控制禁止某些非法IP访问,在Directory选项控制: 

<Directory "/var/www">
#   Options Indexes FollowSymLinks
    Options FollowSymLinks		# 禁用Indexes,防止根目录泄露
    AllowOverride All

# Controls who can get stuff from this server.
    Order allow,deny
    Allow from all

	Deny from 10.0.0.1 			# 阻止一个IP 
	Deny from 192.168.0.0/24 	# 阻止一个IP段 
</Directory>


只允许某些IP访问,适合允许公司内部或者合作伙伴访问: 

<Directory "/var/www">
#   Options Indexes FollowSymLinks
    Options FollowSymLinks		# 禁用Indexes,防止根目录泄露
    AllowOverride All

# Controls who can get stuff from this server.
	Order deny,allow 
	Deny from all 

	Allow from example.com 				# 允许某个域名 
	Allow from 10.0.0.1 				# 允许一个iP 
	Allow from 10.0.0.1 10.0.0.2 		# 允许多个iP 
	Allow from 10.1.0.0/255.255.0.0 	# 允许一个IP段,掩码对 
	Allow from 10.0.1 192.168 			# 允许一个IP段,后面不填写 
	Allow from 192.168.0.0/24 			# 允许一个IP段,网络号
</Directory>

 

禁止或允许某些IP访问,也可以从外部文件引入

1) 添加引入文件到 httpd.conf 

Include block_ip_demo.con[f]
Include block_ip_blog.con[f]

 

2)把禁止或允许IP添加到配置文件

本文米扑博客以禁止IP访问为例

cat /etc/httpd/conf/block_ip_demo.conf 
 deny from  117.131.216.197
 deny from  119.44.13.93
 deny from  113.222.238.160

方法跟httpd.conf直接禁止IP类似,只是在禁止IP量很大(如1000个、10000个)时,引入一个外部的conf配置文件管理会更方便、简洁

 

配置好 httpd.conf 文件后,需要重启Apache,才能生效

/etc/init.d/httpd  restart

 

综上小结

要禁止访问某个 url,例如 /html5 开头的路径,实现方法有三种

方法1:URL相对路径禁止

<Location ~ "^/html5">
    Require all denied
#    Order allow,deny
#    Deny from all
</Location>

说明:

此方法是禁止访问指定的 URL 相对路径,返回 403 禁止访问代码

Require all denied 是Apache 2.4.x 以上的用法,等同于Apache 2.2.x 用法 Order allow,deny    Deny from all

 

方法2:RedirectMatch 重定向正则匹配 (推荐

<Directory "/usr/local/httpd/htdocs">
   
RedirectMatch 301  ^/html5  https://www.google.com
    ...
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

此方法是将 /html5 开头的URL匹配,全部跳转到 google,可以全局配置

 

方法3:RewriteRule 规则匹配重写

<VirtualHost *:443>
   
RewriteEngine On
    RewriteRule   ^/html5  https://www.google.com/$1 [R=permanent,L]

    ....
</VirtualHost>

此方法在 VirtualHost 中配置才生效,在 httpd.conf 全部配置发现并未生效,原因不详

 

 

参考推荐

Apache Rewrite 规则 RewriteCond、RewriteRule 参数配置详解

Apache 封禁IP及IP段访问

httpd使用ssl模块配置HTTPS

实用 .htaccess 用法大全

.htaccess绑定域名到子目录

Nginx使用ssl模块配置HTTPS

Nginx Redirect重定向所有子域名到www

Apache 实现https+Apache http访问转到https

WordPress:.htaccess缓存提高网站性能

Apache 服务器负载低访问慢的原因分析和优化方案