前言:
最开始接触.htaccess文件是upload-las上,当时简单的理解为,在黑名单的情况下,特殊后缀名也被禁了,上传个图片马,排除文件包含的话,就使用.htaccess文件
最开始知道它的前提条件就是:图片马情况下不能文件包含+文件名没被改
网上复制了一个模板,开始用,
但是后来,认真的想想,我不知道FileMatch是什么,还有SetHander..
目录
htaccess文件的功能:
.htaccess和默认配置文件httpd.conf有点像郡主和君王的感觉,前者可以在自己管辖的目录下自定义,郡主的权利肯定也是君王授权的,在httpd.conf文件里面加上一条:
AllowOverride All
.htassess就可以用了,如果你玩图片马的时候,发现连htaccess文件都用不了,就是httpd.conf文件改成了
AllowOverride None
1,允许/阻止特定的用户或者目录的访问
(存放密码的,可以包含文件的,这些都需要限制用户访问)
在htaccess文件内容:
Order Allow,Deny
Deny from All
Allow from 192.168.0.0/24
使用order命令,有deny和allow两个规则,apache会按照order决定最后使用哪一条规则(比如上面,最终执行的顺序就是,先是Allow,再是Deny,整个文件的作用就是,不允许所有访问)
2.创建条件指令,这些指令只有在条件为真时生效
<ifModule mod_php4.c>
php_value default_charset utf-8
</ifModule>
如果php4的模块模块没有在服务器上运行,就不会将整个网站的默认字符编码设置为utf-8
3.设置默认界面
一般就是访问一个网站直接跳转到的就是熟悉的nidex.php或者其他的
4.隐藏和拒绝文件
以.ht文件开头的都是被默认配置为隐藏的,因为里面有服务器指令、密码等内容
(以下,是在htaccess文件中写入,意思为禁止访问以.ht开头的文件)
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
~ :开启正则表达式
^\.ht :以.ht开头的
<Files ~ "^.*\.([Ll][Oo][Gg])">
Order allow,deny
Deny from all
Satisfy All
</Files>
由于正则表达式区分大小写,就是用[ ]来忽略大小写;比如:[Ll] 这个就是忽略l这个英文单词
如果是想是多类文件名都被禁止访问,就是用管道符' | ',可以把它理解为 或
<Files ~ "^.*\.([Ll][Oo][Gg]|[cC][oO][mM][mM][eE][nN][tT])">
Order allow,deny
Deny from all
Satisfy All
</Files>
解决很久的疑惑:
FileMatch是什么,
它就作为一个条件标签,满足后即可执行两个标签里面的
(以下是自己的一些理解,如果有错请指出)
下图是:满足后缀为.css或者.style的文件
就可以被当成php处理
SetHandler
可以强制所有匹配的文件被一个指定的处理器处理
<FilesMatch "\.(css|style)$">
SetHandler application/x-httpd-php
</FilesMatch>
这个很类似,
下图:
满足目录是/var/www/
就可以使用.htaccess文件的功能
<Directory /var/www/>
AllowOverride All
</Directory>
两者
都可以将给定的文件扩展名映射到指定的内容类型
AddType application/x-httpd-php .php3 .php5 .phtml
SetHandler application/x-httpd-php .php3 .php5 .phtml
这个就解释了为什么能使用特殊的后缀名的原因了
以上我的问题解决了
学习文章:
.htaccess tricks and tips.. part one: tips, tricks, hints, examples; juicy .htaccess information.