apache的htaccess文件语法详解

 更新时间:2016年1月28日 00:50  点击:1501

Apache系统中的.htaccess文件(也称“分布式配置文件”)提供了针对目录改变配置的方法,也就是在一个特定的文档目录中放置一个包含指令的文件, 以作用于此目录及其所有子目录。直白的说,.htaccess文件只是一个简单的文档,可以在里面加些简单的命令实现各种不同的设置。

如何知道主机是否支持.htaccess?

其实大部分主机都支持.htaccess,但实际上你的主机提供商并不会特别声明。一般来说,如果你的主机使用Unix或Linux系统,或任何版本的Apache网络服务器,理论上都是支持.htaccess的,但是有的主机服务商有可能不允许你使用它。判断你的主机是否允许.htaccess,一个很好的方法是看它是否支持文件夹密码保护。为达到此功能,主机服务商需要使用.htaccess(当然,少数情况下他们虽提供密码保护功能,但却并不允许你使用.htaccess)。最好的办法是上传你自己的.htaccess文件看看是否有用,或者直接向你的主机服务商咨询。

.htaccess文件可以做什么?

.htaccess文件可以做大量的事情,包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等等。下面园子将列举几个常用的功能与大家分享。

使用.htaccess文件自定义404错误页

.htaccess文件最常用的功能应该就是自定义404页面了,其操作也非常简单,在.htaccess 文件中加入代码:

 代码如下 复制代码

ErrorDocument 404 /Error.html

然后建立一个简单的html404页面并命名 Error.html
把 Error.html放置在网站根目录即可。具体详细设置方法请看:如何设置404页面。

当然,如果你的404文件不在网站的根目录下,你只需要把路径设置为:

 代码如下 复制代码

ErrorDocument 404/errors/Error.html

以下列举了网站上一些最常用的错误类型:

401 – Authorization Required 需要验证
400 – Bad request 错误请求
403 – Forbidden 禁止
500 – Internal Server Error 内部服务器错误
404 – Wrong page 找不到页面

你可以有选择的创建错误时的文件,然后在.htaccess文件里面进行定义(方法和404页面的方法一样),上传到你的网站上即可。

1.时区设置


有些时候,当你在PHP里使用date或mktime函数时,由于时区的不同,它会显示出一些很奇怪的信息。下面是解决这个问题的方法之一。就是设置你的服务器的时区。你可以在这里找到所有支持的时区的清单。

 SetEnv TZ Australia/Melbourne

2. seo/seo.html" target="_blank">搜索引擎友好的301永久转向方法


为什么这是搜索引擎友好的呢?因为现在很多现代的搜索引擎都有能根据检查301永久转向来更新它现有的记录的功能。

 代码如下 复制代码

Redirect 301 http://www.111cn.net http://www.111cn.net/

3. 屏蔽下载对话框


通常,当你下载东西的时候,你会看到一个对话框询问你是保持这个文件还是直接打开它。如果你不想看到这个东西,你可以把下面的一段代码放到你的.htaccess文件里。

 代码如下 复制代码

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

4. 省去www前缀

SEO的一个原则是,确保你的网站只有一个URL。因此,你需要把所有的通过www的访问转向的非www,或者反这来。

 代码如下 复制代码

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www111cn.net [NC]
RewriteRule ^(.*)$ http://cnmiss.cn/$1 [L,R=301]

5. 个性化Error页面
对每个错误代码定制自己个性化的错误页面。

 代码如下 复制代码

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

6. 压缩文件


通过压缩你的文件体积来优化网站的访问速度。

 代码如下 复制代码

# 压缩 text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
8.AddOutputFilterByType DEFLATE application/rss+xml
9.AddOutputFilterByType DEFLATE application/javascript
10.AddOutputFilterByType DEFLATE application/x-javascript

7. 缓存文件

缓存文件是另外一个提高你的网站访问速度的好方法。

 代码如下 复制代码

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch> >

8. 对某些文件类型禁止使用缓存

而另一方面,你也可以定制对某些文件类型禁止使用缓存。

# 显式的规定对脚本和其它动态文件禁止使用缓存

 代码如下 复制代码
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

安全问题

下面的htaccess代码能够提高你的web服务器的安全水平。图片链接盗用保护非常有用,它能防止其他人偷盗使用你的服务器上的图片资源。

1. 通过.htaccess放盗链
痛恨那些偷盗链接你的web服务器上的图片资源而耗尽了你的带宽的行为吗?试试这个,你可以防止这种事情的发生。

 代码如下 复制代码

RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?cnmiss.cn/.*$ [NC]
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

2. 防黑客


如果你想提高网站的安全等级,你可以加上下面的几行代码,这样可以防止一些常见恶意URL匹配的黑客攻击技术。

 代码如下 复制代码

RewriteEngine On
 
# proc/self/environ? 没门!
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
 
# 阻止脚本企图通过URL修改mosConfig值
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
 
# 阻止脚本通过URL传递的base64_encode垃圾信息
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
 
# 阻止在URL含有<script>标记的脚本
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
 
# 阻止企图通过URL设置PHP的GLOBALS变量的脚本
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
 
# 阻止企图通过URL设置PHP的_REQUEST变量的脚本
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
 
# 把所有被阻止的请求转向到403禁止提示页面!
RewriteRule ^(.*)$ index.php [F,L]

3. 阻止访问你的 .htaccess 文件

下面的代码可以阻止别人访问你的.htaccess文件。同样,你也可以设定阻止多种文件类型。

 代码如下 复制代码

# 保护你的 htaccess 文件
<Files .htaccess>
order allow,deny
deny from all
</Files>
 
# 阻止查看指定的文件
<Files secretfile.jpg>
order allow,deny
deny from all
</Files>
 
# 多种文件类型
<FilesMatch “.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$”>
Order Allow,Deny
Deny from all
</FilesMatch>

4. 重命名 htaccess 文件

你可以通过重命名htaccess文件来对其进行保护。

 代码如下 复制代码

AccessFileName htacc.ess

5. 禁止目录浏览
禁止服务器对外显示目录结构,反之亦然。

# 禁止目录浏览
Options All -Indexes
 
# 开放目录浏览
Options All +Indexes

6. 改变缺省的Index页面
你可以把缺省的 index.html, index.php 或 index.htm 改成其它页面。

DirectoryIndex business.html

7. 通过引用信息来阻止某些不欢迎的浏览者

 代码如下 复制代码

# 阻止来自某网站的用户
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]
RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]
RewriteRule .* - [F]
 
</ifModule>

8. 通过判断浏览器头信息来阻止某些请求

这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

 代码如下 复制代码

# 阻止来自某些特定网站的用户
<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT Deny from env=HTTP_SAFE_BADBOT
</ifModule>

9. 禁止脚本执行,加强你的目录安全

 代码如下 复制代码

# 禁止某些目录里的脚本执行权限
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI

使用.htaccess文件实现网站目录密码保护
有时候你可能会针对某个目录设定对应的密码保护,首先要做的是生成一个.htpasswd的文档,然后输入用于访问网站的用户名和密码,格式为:

 代码如下 复制代码

username:password

其中“password”的位置应该是加密过的密码。另外需要注意的是.htpasswd文档的位置最好放在www目录之外,这样相对会安全一些。

最后在.htaccess中加入如下指令:

 代码如下 复制代码

AuthUserFile /full/path/to/.htpasswd (.htpasswd的服务器目录)
AuthGroupFile /dev/null (需要授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)
Require valid-user

这样就完成了使用.htaccess文件实现网站目录密码保护。

注:在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。最简单的方法是在.htaccess文件中加入如下指令即可:

 代码如下 复制代码

order allow,deny
deny from all

使用.htaccess文件拒绝某个IP的访问

其实这个功能也经常用到,有时候你可能要禁止某个或者某段IP访问到你的网站,你就可以通过在.htaccess中加入类似如下的代码来实现:

 代码如下 复制代码

order allow,deny
deny from 220.156.156.55
deny from 220.156.156.
allow from all

其中的第二行代码为拒绝某个IP,第三行是拒绝某个IP段,也就只要IP地址在220.156.156.0~220.156.156.255 之前的IP段都无法再访问你的站点。如果你想阻止所有人访问该目录,则可以使用:

 代码如下 复制代码

deny from all

使用.htaccess文件防盗链
很多站长都会遇到比较郁闷的问题,就是有些人会经常盗链自己网站的图片、软件等资源,这样造成了不必要的流量浪费。想要防止盗链简单的做法是在.htaccess文件加入如下指令:

 代码如下 复制代码

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif&line;jpg)$ - [F]

如果你想避免此方法给那些盗链你的网站带来不友好的空白,你可以做一张图片来代替,这张图片也可以适当的宣传你自己的网站。指令如下:

 代码如下 复制代码

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif&line;jpg)$ http://www.mydomain.com/替代图片文件名 [R,L]

使用.htaccess文件改变缺省的首页文件
这一点也比较常用,如果你的站点是使用PHP来架构的,你可以只想定义index.php为缺省的首页文件,通过.htaccess文件可以轻松做到这点。代码如下:

 代码如下 复制代码

DirectoryIndex index.php index.php3 messagebrd.pl index.html index.htm

服务器会从左至右进行寻找,检查哪个文档在你的网站目录中存在。先找到的文件即是你网站的缺省首页文件。

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
  • C# 向二进制文件进行读写的操作方法

    该例子使用 BinaryStream 和 BinaryWriter 对二进制文件进行读写操作先上代码再根据我理解的所分享给各位朋友...2020-06-25