htaccess
.htaccess(Hypertext Access)是一个用于配置Apache Web服务器的文件, 也称为分布式配置文件,它可以通过在网站根目录或特定目录下创建一个名为.htaccess的文本文件来实现。
.htaccess文件中包含了一系列的指令,可以用来修改服务器的行为、设置重定向、启用认证、防止目录列表等。它可以对特定目录及其子目录应用配置,并且支持使用正则表达式进行匹配。
.htaccess常见用途的示例:
1、重定向,可以使用.htaccess文件实现URL重定向,将某个URL地址重定向到另一个地址。例如:将所有访问lichil.com.com的请求重定向到seo.lichil.com:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^lichil.com$ [NC]
RewriteRule ^(.*)$ http://seo.lichil.com.com/$1 [R=301,L]
2、防止目录浏览,可以禁止Apache在没有默认索引页面的情况下列出目录中的文件列表。例如:
Options -Indexes
3、访问控制,可以限制对某些文件或目录的访问权限,要求用户进行身份验证。例如:要求在admin/目录下的所有文件需要进行基本身份验证:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
4、应该防止.htaccess及.htpasswd文件被浏览或下载:
<Files ~ "^.(htaccess|htpasswd)$">
Require all denied
</Files>
上述代码使用<Files>指令指定了需要限制访问的文件名(.htpasswd),然后使用 Require all denied 指令拒绝所有请求对该文件的访问。
通过这样的设置,当有人尝试访问 htpasswd 文件时,服务器将返回 403 禁止访问的错误。
这只是一种基本的安全措施,不能完全保证 htpasswd 文件不会泄露。为了更加安全,建议将敏感文件(如 htpasswd)存放在服务器之外的其他位置,并确保文件的权限设置正确,只允许受信任的用户或进程访问。另外,定期更改密码也是保护敏感文件的一种有效方式。
.htaccess文件的使用需要确保服务器上已启用AllowOverride,否则文件中的指令将不会生效。此外,修改.htaccess文件可能会对网站产生重大影响,因此在修改之前应谨慎备份,并确保了解所做更改的后果。
一个网站可以有N个.htaccess文件,作用域各有不同。
1、目录级别作用域
.htaccess文件通常与特定目录相关联,并影响该目录及其子目录中的文件和请求。这意味着在包含 .htaccess 文件的目录及其子目录中的所有请求都将受到.htaccess文件的规则和配置的影响。这种作用域非常有用,因为它允许您在每个目录中定义自己的规则和配置,而无需对整个服务器进行更改。
2、全局(服务器)级别作用域
.htaccess 文件可以在服务器的主配置文件中进行全局设置,从而影响整个服务器上的所有站点和请求。这些全局配置通常由服务器管理员或托管提供商设置,超出了单个网站所有者的控制范围。
为了安全起见,有些目录的文件禁止直接浏览:
Order Deny,Allow
Deny from all
关于Order、deny、allow的作用,听起来一直比较绕,有时候不必深究,套着用就好,哈。
简单说明:
Order:定义允许或拒绝访问规则的顺序。它接受两个可选值:deny,allow 或 allow,deny。这些值指定了授权规则的优先级次序。
Deny:指定要拒绝访问的用户、主机或IP地址。您可以使用 Deny from all 来拒绝所有用户的访问,或者使用 Deny from <IP 地址> 来拒绝特定 IP 地址的访问。
Allow:指定要允许访问的用户、主机或IP地址。您可以使用 Allow from all 来允许所有用户的访问,或者使用 Allow from <IP 地址> 来允许特定 IP 地址的访问。
示例:
<Directory /var/www/html>
Order deny,allow
Deny from 192.168.1.100
Allow from all
</Directory>
Order deny,allow 指定了拒绝规则优先于允许规则。Deny from 192.168.1.100 拒绝了 IP 地址为 192.168.1.100 的访问,而 Allow from all 允许所有其他地址的访问。不过,对于动态IP的我们来说,拒绝一个稍为了解网络的人是一件很困难的事。
注意,如果你的APACHE版本较高,注意是否能够使用,上述指令在Apache 2.4版本中已经被弃用,推荐使用新的指令 Require 来进行访问控制。例如:
<Directory /var/www/html>
Require all granted
Require not ip 192.168.1.100
</Directory>
Require指令基于不同的模块和条件,用于定义哪些用户、主机或IP地址可以访问您的网站。简单说明Require指令及其用法:
Require all granted:允许所有用户访问资源。
Require all denied:拒绝所有用户访问资源。
Require ip <IP地址>:只允许特定IP地址访问资源。
Require host <主机名>:只允许特定主机名访问资源。
Require valid-user:要求用户登录才能访问资源。
Require expr<表达式>:使用自定义表达式来进行访问控制