.htaccess文件

1.1 什么是.htaccess文件

从本指南中,你将能够学习到有关.htaccess文件及其功能的知识,并用以优化你的网站。尽管.htaccess只是一个文件,但它能够更改服务器的设置,容许你作许多不一样的事情,最流行的功能是您能够建立自定义的“404 error”页面。.htaccess 并不难于使用,归根结底,它只是在一个text文档中添加几条简单的指令而已。
首先你要判断主机支持它
这可能很难用简单的答案来回答。许多主机支持.htaccess,但实际上并不会特别声明,许多其余类型的主机有能力但并不容许他们的用户使用. htaccess。通常来讲,若是你的主机使用Unix或Linux系统,或任何版本的Apache网络服务器,从理论上都是支持.htaccess的,尽管你的主机服务商可能不容许你使用它。
判断你的主机是否容许.htaccess,一个标志很好的是它是否支持文件夹密码保护。为达到此功能,主机服务商须要使用.htaccess(固然,少数状况下他们虽提供密码保护功能,但却并不容许你使用.htaccess)。若是你不肯定本身的主机是否支持.htaccess,最好的办法是上传你本身的.htaccess文件看看是否有用,或者直接发送e-mail向你的主机服务商咨询。
Apache系统中的.htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以做用于此目录及其全部子目录。做为用户,所能使用的命令受到限制。管理员能够经过Apache的AllowOverride指令来设置。
子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。
.htaccess必须以ASCII模式上传,最好将其权限设置为644。
.htaccess能够作大量的事情,包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只容许特定IP地址的用户、禁止目录列表,以及使用其余文件做为index文件。

1.2 如何建立.httaccess文件

建立.htaccess文件也许会给你带来一些困难。写文件很容易,你只须要在文字编缉器(例如:写字板)里写下适当的代码。真正困难的多是文件的保存,由于.htaccess是一个古怪的文件名(它事实上没有文件名,只有一个由8个字母组成的扩展名),而在一些系统(如windows 3.1)中没法接受这样的文件名。在大多数的操做系统中,你须要作的是将文档保存成名为: “.htaccess” (包括引号)。若是这也不行,你须要将其先命名为其它名字(例如htaccess.txt),再将其上传到服务器上,以后直接使用FTP软件来重命名。
警告
在使用.htaccess以前,我必须给你一些警告。虽然在服务器上使用.htaccess绝对不太可能给你带来任何麻烦(若是有些东西错了,它只是没效用罢了),但若是你使用Microsoft FrontPage Extensions,就必须特别当心。由于FrontPage Extensions自己使用了.htaccess,所以你不能编辑它并加入你本身的信息。若是确实有这方面的须要(并不推荐,可是可能),你应该先从服务器上下载.htaccess文档(若是存在),以后在前面加上你的代码。
2|.httacces文件的配置

2.1.配置.htaccess 自定义错误页

我要介绍的.htaccess的第一个应用是自定义错误页面,这将使你能够拥有本身的、个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页或没有任何页面。这会让你的网站在出错的时候看上去更专业。你还能够利用脚本程序在发生错误的时候通知你(例如我使用Free Webmaster Help的PHP脚本程序,当找不到页面的时候自动e-mail给我)。
你所知道的任何页面错误代码(像404找不到页面),均可以经过在.htaccess文件里加入下面的文字将其变成自定义页面:
           ErrorDocument errornumber /file.html
举例来讲,若是个人根目录下有一个nofound.html文件,我想使用它做为404 error的页面:
           ErrorDocument 404 /notfound.html
若是文件不在网站的根目录下,你只须要把路径设置为:
           ErrorDocument 500 /errorpages/500.html
如下是一些最经常使用的错误:
经常使用的客户端请求错误返回代码:
400 - Bad request 错误请求
401 Authorization Required须要验证
403 Forbidden禁止
404 Not Found找不到页面
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常见的服务器错误返回代码:
           500 Internal Server Error内部服务器错误
接下来,你要作的只是建立一个错误发生时显示的文件,而后把它们和.htaccess一块儿上传。
用户能够利用.htaccess指定本身事先制做好的错误提醒页面。通常状况下,人们能够专门设立一个目录,例如errors放置这些页面。而后再.htaccess中,加入以下的指令:
           ErrorDocument 404 /errors/notfound.html
           ErrorDocument 500 /errors/internalerror.html
一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所须要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:
           ErrorDocument 错误代码 /目录名/文件名.扩展名
若是所须要提示的信息不多的话,没必要专门制做页面,直接在指令中使用HTML号了,例以下面这个例子:
           ErrorDocument 401 “你没有权限访问该页面,请放弃!”

2.2.配置.htaccess 停示显示目录列表

有些时候,因为某种缘由,你的目录里没有index文件,这意味着当有人在浏览器地址栏键入了该目录的路径,该目录下全部的文件都会显示出来,这会给你的网站留下安全隐患。
为避免这种状况(而没必要建立一堆的新index文件),你能够在你的.htaccess文档中键入如下命令,用以阻止目录列表的显示: Options -Indexes

2.3.配置.htaccess 阻止/容许特定的IP地址

某些状况下,你可能只想容许某些特定IP的用户能够访问你的网站(例如:只容许使用特定ISP的用户进入某个目录),或者想封禁某些特定的IP地址(例如:将低级用户隔离于你的信息版面外)。固然,这只在你知道你想拦截的IP地址时才有用,然而如今网上的大多数用户都使用动态IP地址,因此这并非限制使用的经常使用方法。
你可使用如下命令封禁一个IP地址:
           deny from 000.000.000.000
这里的000.000.000.000是被封禁的IP地址,若是你只指明了其中的几个,则能够封禁整个网段的地址。如你输入210.10.56.,则将封禁210.10.56.0~210.10.56.255的全部IP地址。
你可使用如下命令容许一个IP地址访问网站:
           allow from 000.000.000.000
被容许的IP地址则为000.000.000.000,你能够象封禁IP地址同样封禁整个网段。
若是你想阻止全部人访问该目录,则可使用:
           deny from all
不过这并不影响脚本程序使用这个目录下的文档。

2.4.配置.htaccess 替换index文件

改变缺省的首页文件
通常状况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,好比在w3sky中是 w3sky.PHP。这种状况下,要用户记住文件名来访问很麻烦。在.htaccess中能够轻易的设置新的缺省文件名:
           DirectoryIndex 新的缺省文件名
也能够列出多个,顺序代表它们之间的优先级别,例如:
           DirectoryIndex filename.html index.cgi index.pl default.htm
也许你不想一直使用index.htm或index.html做为目录的索引文件。举例来讲,若是你的站点使用PHP文件,你可能会想使用 index.PHP来做为该目录的索引文档。固然也没必要局限于“index”文档,若是你愿意,使用.htaccess你甚至可以设置 foofoo.balh来做为你的索引文档!
这些互为替换的索引文件能够排成一个列表,服务器会从左至右进行寻找,检查哪一个文档在真实的目录中存在。若是一个也找不到,它将会把目录列表显示出来(除非你已经关闭了显示目录文件列表)。
           DirectoryIndex index.PHP index.PHP3 messagebrd.pl index.html index.htm

2.5.配置.htaccess 重定向页面

.htaccess最有用的功能之一就是将请求重定向到同站内或站外的不一样文档。这在你改变了一个文件名称,但仍然想让用户用旧地址访问到它时,变的极为有用。另外一个应用(我发现的颇有用的)是重定向到一个长URL,例如在个人时事通信中,我可使用一个很简短的URL来指向个人会员连接。如下是一个重定向文件的例子:
           Redirect /location/from/root/file.ext
           [url]http://www.w3sky.com/new/file/123.html[/url]
上述例子中,访问在root目录下的名为oldfile.html能够键入:
           /oldfile.html
访问一个旧次级目录中的文件能够键入:
           /old/oldfile.html
你也可使用.htaccess重定向整个网站的目录。假如你的网站上有一个名为olddirectory的目录,而且你已经在一个新网站 [url]http://www.w3sky.com/newdirectory/[/url]上创建了与上相同的文档,你能够将旧目录下全部的文件作一次重定向而没必要一一声明:
           Redirect /olddirectory [url]http://www.w3sky.com/newdirectory[/url]
这样,任何指向到站点中/olddirectory目录的请求都将被从新指向新的站点,包括附加的额外URL信息。例若有人键入:
            [url]http://www.w3sky.com/olddirecotry/oldfiles/p_w_picpaths/p_w_picpath.gif[/url]
请求将被重定向到:
            [url]http://www.w3sky.com/newdirectory/oldfiles/p_w_picpaths/p_w_picpath.gif[/url]
若是正确使用,此功能将极其强大。
咱们可能对网站进行从新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其余网站连接过来的访问就可能出错。这种状况下,能够经过以下指令来完成旧的URL自动转向到新的地址:
           Redirect /旧目录/旧文档名 新文档的地址
或者整个目录的转向:
           Redirect 旧目录 新目录

3.1.密码保护的.htaccess文件

尽管有各类各样的.htaccess用法,但至今最流行的也多是最有用的作法是将其用于网站目录可靠的密码保护。尽管JavaScrip等也能作到,但只有.htaccess具备完美的安全性(即访问者必须知晓密码才能够访问目录,而且绝无“后门”可走)。
利用.htaccess将一个目录加上密码保护分两个步骤。第一步是在你的.htaccess文档里加上适当的几行代码,再将.htaccess文档放进你要保护的目录下:
           AuthName “Section Name”
           AuthType Basic
           AuthUserFile /full/path/to/.htpasswd
           Require valid-user
你可能须要根据你的网站状况修改一下上述内容中的一些部分,如用被保护部分的名字”Members Area”,替换掉“Section Name”。
/full/parth/to/.htpasswd则应该替换为指向.htpasswd文件(后面详述该文档)的完整服务器路径。若是你不知道你网站空间的完整路径,请询问一下你的系统管理员。

3.2.密码保护的.htpasswd文件

目录的密码保护比.htaccess的其余功能要麻烦些,由于你必须同时建立一个包含用户名和密码的文档,用于访问你的网站,相关信息(默认)位于一个名为.htpasswd的文档里。像.htaccess同样,.htpasswd也是一个没有文件名且具备8位扩展名的文档,能够放置在你网站里的任何地方(此时密码应加密),但建议你将其保存在网站Web根目录外,这样经过网络就没法访问到它了。1516501417
在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然能够用其余方式作到这点,好比文档的权限。不过,.htaccess自己也能作到,只需加入以下的指令:1516501417
           order allow,deny
           deny from all

3.3.配置 .htaccess 输入用户名和密码

要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要作的是生成一个.htpasswd的文本文档,例如:
           forge:y4E7Ec8e7EwV
这里密码通过加密,用户能够本身找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档以外,这样更为安全些。
有了受权用户文档,能够在.htaccess中加入以下指令了:
           AuthUserFile .htpasswd的服务器目录
           AuthGroupFile /dev/null (须要受权访问的目录)
           AuthName EnterPassword
           AuthType Basic (受权类型)
           require user wsabstract (容许访问的用户,若是但愿表中全部用户都容许,可使用 require valid-user)
注,括号部分为学习时候本身添加的注释
拒绝来自某个IP的访问
若是我不想某个政府部门访问到个人站点的内容,那能够经过.htaccess中加入该部门的IP而将它们拒绝在外。
例如:
           order allow,deny
           deny from 210.10.56.32
           deny from 219.5.45.
           allow from all

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255
想要拒绝全部人?用deny from all好了。不止用IP,也能够用域名来设定。
建立好.htpasswd文档后(能够经过文字编辑器建立),下一步是输入用于访问网站的用户名和密码,应为:
           username:password
“password”的位置应该是加密过的密码。你能够经过几种方法来获得加密过的密码:一是使用一个网上提供的permade脚本或本身写一个;另外一个很不错的username/password加密服务是经过KxS网站,这里容许你输入用户名及密码,而后生成正确格式的密码。
对于多用户,你只须要在.htpasswd文档中新增一样格式的一行便可。另外还有一些免费的脚本程序能够方便地管理.htpasswd文档,能够自动新增/移除用户等。

3.4.配置.htaccess 直接访问加密网站

当你试图访问被.htaccess密码保护的目录时,你的浏览器会弹出标准的username/password对话窗口。若是你不喜欢这种方式,有些脚本程序能够容许你在页面内嵌入username/password输入框来进行认证,你也能够在浏览器的URL框内以如下方式输入用户名和密码(未加密的):
           [url]http://username:password@[/url][url]www.w3sky.com/directory/[/url]

3.5.利用 .htaccess 防止盗链

若是不喜欢别人在他们的网页上链接本身的图片、文档的话,也能够经过htaccess的指令来作到。
所须要的指令以下:
           RewriteEngine on
           RewriteCond %{ HTTP_REFERER } !^$
           RewriteCond %{ HTTP_REFERER } !^http://(www.)?w3sky.com/.*$ [NC]
           RewriteRule .(gif &line;jpg)$ - [F]
若是以为让别人的页面开个天窗很差看,那能够用一张图片来代替:
           RewriteEngine on
           RewriteCond %{ HTTP_REFERER } !^$
           RewriteCond %{ HTTP_REFERER } !^http://(www.)?w3sky.com/.*$ [NC]
           RewriteRule .(gif &line;jpg)$ [url]http://www.w3sky.com/[/url]替代图片文件名 [R,L]

3.6.利用 .htaccess进行地址转向

这种方法,就是把yourdomain.com的流量所有 301转向[url]www.yourdomain.com[/url](或者反过来)。其实对于这种方法,国外有人认为对PageRank没有帮助。我以为是由于他们看到Google管理员工具中有一个首选域工具,能够指定Google的爬虫把 [url]www.yourdomain.com[/url]或者yourdomain.com做为抓取和排名的首选域,转向彷佛就没有必要了。但确实又有很多人证明这是有效的,反正目前尚未人说这种方法会对SEO或者pagerank有什么损害。
在.htaccess中写入:
              Options +FollowSymlinks All -Indexes
              rewriteEngine on
              rewriteBase /
              RewriteCond %{HTTP_HOST} ^domain.com$
              RewriteRule ^(.*)$
[url]http://www.domain.com/[/url] $1 [R=301,L]

3.7.利用 .htaccess对域名中“www”的控制

强制去除3w
下面以 Wordpress 为例,其它的状况,能够本身参照解决。在你的 Wordpress 目录下一般会有一个 .htaccess 文件,若是没有,那就手动创建一个。若是你设定了 permalink 的话,.htaccess 里面的内容会有以下一坨:
             <IfModule mod_rewrite.c>
              RewriteEngine On
             RewriteBase /
             RewriteCond %{REQUEST_FILENAME} !-f
             RewriteCond %{REQUEST_FILENAME} !-d
             RewriteRule . /index.php [L]
             </IfModule>
具体是啥意思咱就甭管它了,只管在 RewriteBase / 这行下面加上:
             RewriteCond %{HTTP_HOST} ^[url]www.yourdomain.tld[/url]$ [NC]
             RewriteRule ^(.*)$
[url]http://yourdomain.tld/[/url]$1 [R=301,L]
这样就大功告成了。固然要把 yourdomain.tld 换成你本身的域名。上面两行的意思是把 [url]www.yourdomain.tld[/url] 这种形式改写成 yourdomain.tld, 并把访问前者的全部连接 永久转向到后者。
域名前强制加上www
若是你实在是坚持要把 www 加在前面,我上面的算是白写了,表示遗憾。 但,你能够。只需把上面添加的两行代码改为这样:
             RewriteCond %{HTTP_HOST} ^yourdomain.tld$ [NC]
             RewriteRule ^(.*)$
[url]http://www.yourdomain.tld/[/url]$1 [R=301,L]

4.1.     .htaccess 总结

.htaccess是一个站点管理员能够应用的强大工具,有更多的变化以适应不一样的用途,能够节约时间及提升网站的安全性
.htaccess的特别说明
* 启用.htaccess,须要修改httpd.conf,启用AllowOverride,并能够用AllowOverride限制特定命令的使用
* 若是须要使用.htaccess之外的其余文件名,能够用AccessFileName指令来改变。例如,须要使用.config ,则能够在服务器配置文件中按如下方法配置:
           AccessFileName .config
* 通常状况下,不该该使用. htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能经过.htaccess文件实现,其实并非这样,把用户认证写在主配置文件中是彻底可行的,并且是一种很好的方法。.htaccess文件应该被用在内容提供者须要针对特定目录改变服务器的配置而又没有 root权限的状况下。若是服务器管理员不肯意频繁修改配置,则能够容许用户经过.htaccess文件本身修改配置,尤为是ISP在同一个机器上运行了多个用户站点,而又但愿用户能够本身改变配置的状况下。虽然如此,通常都应该尽量地避免使用.htaccess文件。任何但愿放在.htaccess文件中的配置,均可以放在主配置文件的<Directory>段中,并且更高效。避免使用.htaccess文件有两个主要缘由,即性能和安全。
附:.htaccess工具链接
在线 .htaccess文件生成器
[url]http://cooletips.de/htaccess/[/url] 可以在线生成. htaccess文件,很简单的就配置重定向,系统错误文件等。
相关文章
相关标签/搜索