Htaccess文件大全(使用指南)

Htaccess文件大全(使用指南)

一、htaccess是什么文件?

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。

二、它有什么用?

htaccess通过htaccess文件,可以帮我们实现大量的事情:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

具体用法详述与注意事项:

三、通过htaccess实现301重定向

在很多情况下,网站都需要进行301302重定向,其中一个为永久重定向,一个为临时重定向。比如网站整个更换了域名,比如网站结构或目录发生了移动,比如需要将某个域名上的文件迁移到另外的域上等等。

有时候这种重定向对SEO或者PR值的传递是非常有效的。

一般我们有几种途径制作一个htaccess文件,比如自己手动编辑,好处是非常灵活、功能强大,

另一种途径是通过空间里的控制面板进行自动编辑,这种方法比较死板,但不会因为人为原因出错,除非设置错了。

比如CPanel控制面板中,在Domain>Redirects里面,直接选择相应的选项即可。

下面我们来详细讨论一下如何手动编辑这个htaccess文件:

务必注意:在编辑之前请备份原来的htaccess文件,以免造成损失。

1、出于SEO考虑,将chenjinling.com重定向至www.chenjinling.com。

本站就使用了这种重定向的方法避免页面权重分散。

2、

一旦选择了带WWW的为主域名,今后就不要随意更改,方法如下:

RewriteEngineOn
RewriteCond%{HTTP_HOST}!^www.chenjinling.com$[NC]
RewriteRule^(.*)$http://www.chenjinling.com/$1[L,R=301]

上面这一句话是从反面来写的:如果域名不是带WWW的,就统一301跳转到带WWW的域名中去

2、如果需要将域名从www.chenjinling.com跳转到chenjinling.com,则可以使用一下代码:

RewriteEngineOn
RewriteCond%{HTTP_HOST}!^chenjinling.com$[NC]
RewriteRule^(.*)$http://chenjinling.com/$1[L,R=301]

3、如果需要变更域名,即将老域名换成全新的域名,但是网页内容与结构不变,则可以使用以下代码来实现:

RewriteEngineOn
RewriteBase/
RewriteCond%{HTTP_HOST}!olddomain.com$[NC]
RewriteRule^(.*)$http://newdomain.com/$1[L,R=301]

如果是带WWW的域名间跳转,则以此类推,在域名前加上WWW即可。

一般来说,以上这些是网站建设过程中非常常用的几行代码。这些代码对Google非常适用,Google很快就会按照你的意愿将收录的网址改变过来,并且如果换了域名,还能保留以前域名的PR值。

四、htaccess伪静态的规则

利用htaccess文件可以很好的进行站点伪静态,并且形成的目标地址与真正的静态页面几乎一模一样,如wangqu.html等,伪静态可以非常好的结合SEO来提高站点的排名,并且也能给人一种稳定的印象。

由于伪静态必须要完全根据不同的站点进行不同的设置,因此,我们仅能简单介绍其原理,给出几个常用程序的示例:

若要通过htaccess使用伪静态,则必须空间商支持Rewrite模块,该模块负责URL的重写。否则即便是设置好了,也无法使用,并且还有可能出现500错误。

下面是Discuz的伪静态设置文本:

#RewriteEngine模式打开

RewriteEngineOn

#Rewrite系统规则请勿修改

RewriteRule^archiver/((fid|tid)-[0-9]+\.html)$archiver/index.php?$1

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

RewriteRule^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$viewthread.php?tid=$1&extra=page\%3D$3&page=$2

RewriteRule^space-(username|uid)-(.+)\.html$space.php?$1=$2

RewriteRule^tag-(.+)\.html$tag.php?name=$1

以下是Phpwind的伪静态设置文本:

RewriteEngineOn

RewriteBase/

RewriteRule^(.*)-htm-(.*)$$1.php?$2

RewriteRule^(.*)simple/([a-z0-9\_]+\.html)$$1/simple/index.php?$2

此外,还有很多种不同的规则,如果想制定出适用于自己站点的伪静态规则,必须熟悉网站结构和正则表达式。

五、配置.htaccess自定义错误页

要介绍的.htaccess的第一个应用是自定义错误页面,这将使你可以拥有自己的、个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页或没有任何页面。这会让你的网站在出错的时候看上去更专业。你还可以利用脚本程序在发生错误的时候通知你(例如我使用FreeWebmasterHelpPHP脚本程序,当找不到页面的时候自动e-mail给我)。

你所知道的任何页面错误代码(像404找不到页面),都可以通过在.htaccess文件里加入下面的文字将其变成自定义页面:

ErrorDocumenterrornumber/file.html

举例来说,如果我的根目录下有一个nofound.html文件,我想使用它作为404error的页面:

ErrorDocument404/notfound.html

如果文件不在网站的根目录下,你只需要把路径设置为:ErrorDocument500/errorpages/500.html

以下是一些最常用的错误:

常用的客户端请求错误返回代码:

400-Badrequest错误请求

401AuthorizationRequired需要验证

403Forbidden禁止

404NotFound找不到页面

405MethodNotAllowed

408RequestTimedOut

411ContentLengthRequired

412PreconditionFailed

413RequestEntityTooLong

414RequestURITooLong

415UnsupportedMediaType

常见的服务器错误返回代码:

500InternalServerError内部服务器错误

接下来,你要做的只是创建一个错误发生时显示的文件,然后把它们和.htaccess一起上传。

用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

ErrorDocument404/errors/notfound.htmlErrorDocument500/errors/internalerror.html

一条指令一行。

上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:

ErrorDocument错误代码/目录名/文件名.扩展名

如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:

ErrorDocument401“你没有权限访问该页面,请放弃!

六、配置.htaccess停示显示目录列表


有些时候,由于某种原因,你的目录里没有index文件,这意味着当有人在浏览器地址栏键入了该目录的路径,该目录下所有的文件都会显示出来,这会给你的网站留下安全隐患。

为避免这种情况(而不必创建一堆的新index文件),你可以在你的.htaccess文档中键入以下命令,用以阻止目录列表的显示:Options-Indexes

七、配置.htaccess阻止/允许特定的IP地址

某些情况下,你可能只想允许某些特定IP的用户可以访问你的网站(例如:只允许使用特定ISP的用户进入某个目录),或者想封禁某些特定的IP地址(例如:将低级用户隔离于你的信息版面外)。当然,这只在你知道你想拦截的IP地址时才有用,然而现在网上的大多数用户都使用动态IP地址,所以这并不是限制使用的常用方法。

你可以使用以下命令封禁一个IP地址:

denyfrom000.000.000.000

这里的000.000.000.000是被封禁的IP地址,如果你只指明了其中的几个,则可以封禁整个网段的地址。如你输入210.10.56.,则将封禁210.10.56.0210.10.56.255的所有IP地址。

你可以使用以下命令允许一个IP地址访问网站:

allowfrom000.000.000.000

被允许的IP地址则为000.000.000.000,你可以象封禁IP地址一样封禁整个网段。

如果你想阻止所有人访问该目录,则可以使用:

denyfromall

不过这并不影响脚本程序使用这个目录下的文档。

八、配置.htaccess重定向页面

.htaccess最有用的功能之一就是将请求重定向到同站内或站外的不同文档。这在你改变了一个文件名称,但仍然想让用户用旧地址访问到它时,变的极为有用。另一个应用(我发现的很有用的)是重定向到一个长URL,例如在我的时事通讯中,我可以使用一个很简短的URL来指向我的会员链接。以下是一个重定向文件的例子:

Redirect/location/from/root/file.exthttp://www.w3sky.com/new/file/123.html

上述例子中,访问在root目录下的名为oldfile.html可以键入:

/oldfile.html

访问一个旧次级目录中的文件可以键入:

/old/oldfile.html

你也可以使用.htaccess重定向整个网站的目录。假如你的网站上有一个名为olddirectory的目录,并且你已经在一个新网站http://www.w3sky.com/newdirectory/上建立了与上相同的文档,你可以将旧目录下所有的文件做一次重定向而不必一一声明:

Redirect/olddirectoryhttp://www.w3sky.com/newdirectory

这样,任何指向到站点中/olddirectory目录的请求都将被重新指向新的站点,包括附加的额外URL信息。如果正确使用,此功能将极其强大。

我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的

URL自动转向到新的地址:

Redirect/旧目录/旧文档名新文档的地址

或者整个目录的转向:

Redirect旧目录新目录

.密码保护的.htaccess文件

尽管有各种各样的.htaccess用法,但至今最流行的也可能是最有用的做法是将其用于网站目录可靠的密码保护。尽管JavaScrip等也能做到,但只有.htaccess具有完美的安全性(即访问者必须知晓密码才可以访问目录,并且绝无“后门”可走)。

利用.htaccess将一个目录加上密码保护分两个步骤。第一步是在你的.htaccess文档里加上适当的几行代码,再将.htaccess文档放进你要保护的目录下:

AuthNameSectionNameAuthTypeBasicAuthUserFile/full/path/to/.htpasswdRequirevalid-user

你可能需要根据你的网站情况修改一下上述内容中的一些部分,如用被保护部分的名字”MembersArea”,替换掉“SectionName”。

/full/parth/to/.htpasswd则应该替换为指向.htpasswd文件(后面详述该文档)的完整服务器路径。如果你不知道你网站空间的完整路径,请询问一下你的系统管理员。

十、.密码保护的.htpasswd文件目录的密码保护比.htaccess的其他功能要麻烦些,因为你必须同时创建一个包含用户名和密码的文档,用于访问你的网站,相关信息(默认)位于一个名为.htpasswd的文档里。像.htaccess一样,.htpasswd也是一个没有文件名且具有8位扩展名的文档,可以放置在你网站里的任何地方(此时密码应加密),但建议你将其保存在网站Web根目录外,这样通过网络就无法访问到它了。

在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:

orderallow,denydenyfromall

3.3

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

对某个目录下的文档设定访问用户和对应的密码,

首先要做的是生成一个.htpasswd的文本文档,例如:

forge:y4E7Ec8e7EwV

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权用户文档,可以在.htaccess中加入如下指令了:

AuthUserFile.htpasswd的服务器目录AuthGroupFile/dev/null(需要授权访问的目录)AuthNameEnterPasswordAuthTypeBasic(授权类型)

requireuserwsabstract(允许访问的用户,如果希望表中所有用户都允许,可以使用requirevalid-user

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

.利用.htaccess防止盗链如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。

所需要的指令如下:

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

如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:

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

.htaccess的特别说明

*启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用*如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config,则可以在服务器配置文件中按以下方法配置:

AccessFileName.config

*一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的<Directory>段中,而且更高效。避免使用.htaccess文件有两个主要原因,即性能和安全。

在线.htaccess文件生成器http://cooletips.de/htaccess/能够在线生成.htaccess文件,很简单的就配置重定向,系统错误文件等。敢想敢做敢坚持

.htaccess文件提供了针对每个目录改变配置的方法。top.htaccess文件*相关模块相关指令

*core*mod_authn_file*mod_authz_groupfile*mod_cgi*mod_include*mod_mime

*AccessFileName*AllowOverride*Options*AddHandler*SetHandler*AuthType*AuthName*AuthUserFile*AuthGroupFile*Require

top工作原理和使用方法*

.htaccess文件(或者分布式配置文件”)提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

说明:如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config,则可以在服务器配置文件中按以下方法配置:

AccessFileName.config

允许放在这些文件中的指令取决于AllowOverride指令,此指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许放在.htaccess文件中,则,在本手册的说明中,此指令会有一个覆盖段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。

例如,本手册对AddDefaultCharset指令的说明表明了,此指令可以用于.htaccess文件(Context一行),而Override一行是”FileInfo”,那么为使.htaccess中的此指令有效,则至少要设置”AllowOverrideFileInfo”

例子:Context:serverconfig,virtualhost,directory,.htaccessOverride:FileInfo

如果不能确定一个特定的指令是否允许用于.htaccess文件,可以查阅手册中对指令的说明,看在Context(“上下文”)行中是否有”.htaccess.”

使用.htaccess文件的场合

一般情况下,不应该使用.htaccess文件,除非你对主服务器配置文件没有存取权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,但并不是这样,把用户认证写在主服务器配置中是完全可行的,而且是一种很好的方法。

在内容提供者需要针对目录改变服务器的配置而对服务器系统没有root权限时,则应该使用.htaccess文件。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在一个机器上宿主多个用户站点,而又希望用户可以自己改变配置的情况下。

虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主服务器的<Directory>段中,而且更高效。

避免使用.htaccess文件有两个主要原因。

首先是性能。如果AllowOverride允许使用.htaccess文件,则,Apache需要在每个目录中查找.htaccess因此,无论是否真正用到,允许使用.htaccess文件都会导致性能的下降。另外,每次请求一个页面时,都需要读取.htaccess文件。

还有,Apache必须在所有更高级的目录中查找.htaccess文件,使所有有效的指令都起作用(参见howdirectivesareapplied.),所以,如果有对/www/htdocs/example中页面的请求,Apache必须查找以下文件:

/.htaccess/www/.htaccess/www/htdocs/.htaccess/www/htdocs/example/.htaccess

而且,对此目录以外的每个文件访问,还有4个附加的文件系统访问,即使这些文件都不存在。(注意,这可能仅仅发生在/允许使用.htaccess文件的情况下,虽然这种情况并不多。)

其次是安全。如此,会允许用户修改服务器的配置,可能会导致未加限制的修改,请认真考虑是否给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后许多麻烦。

注意,在/www/htdocs/example目录下.htaccess文件中放置指令,与,在主服务器配置文件中<Directory/www/htdocs/example>段中放置相同指令,是等效的。:

/www/htdocs/example中的.htaccess:

/www/htdocs/example.htaccess文件的内容AddTypetext/example.exm

httpd.conf文件中的段<Directory/www/htdocs/example>AddType

text/example.exm</Directory>

但是,把这个配置放置在服务器配置文件中则更加高效,因为只需要在Apache启动时读取一次,而不是在有文件请求时每次都读取。

AllowOverride设置为”none”可以完全禁止使用.htaccess文件。

AllowOverrideNone

指令的生效

.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是,很重要需要记住的是,其更高级的目录也可能会有.htaccess文件,而指令是按查找顺序依次生效,所以,一个特定目录下的.htaccess文件中的指令可能会覆盖其更高级目录中的.htaccess文件的指令,即,子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

例如:目录/www/htdocs/example1中的.htaccess文件有如下内容:

Options+ExecCGI

(注意:必须设置”AllowOverrideOptions”以允许在.htaccess文件中使用”Options”指令。)

在目录/www/htdocs/example1/example2中的.htaccess文件有如下内容:

OptionsIncludes

由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许OptionsIncludes,它完全覆盖了之前的设置。

认证举例

如果你为了知道如何认证,直接从这里开始看,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实不是这样。把认证指令放在主服务器配置文件的<Directory>段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主服务器配置文件的时候。参见上述的使用.htaccess文件的场合。

有此声明在先,如果你仍然需要使用.htaccess文件,请看以下说明。

必须设置”AllowOverrideAuthConfig”以允许这些指令生效

.htaccess文件的内容:

AuthTypeBasicAuthName”PasswordRequired”AuthUserFile/www/passwords/password.fileAuthGroupFile/www/passwords/group.fileRequireGroupadmins

注意,必须设置AllowOverrideAuthConfig以允许这些指令生效

更详细的有关身份识别和认证的说明,请参见authenticationtutorial

服务器端包含举例

.htaccess文件的另一个常见用途是允许一个特定目录的服务器端包含(ServerSideIncludes),可以在需要的目录中放置.htaccess文件,并如下配置:

Options+IncludesAddTypetext/htmlshtmlAddHandlerserver-parsedshtml

注意,必须同时设置AllowOverrideOptionsAllowOverrideFileInfo使这些指令生效。

更详细的有关服务器端包含的说明,请参见SSItutorial

CGI举例

最后,可以通过.htaccess文件允许在特定目录中执行CGI程序,需按如下配置:

Options+ExecCGIAddHandlercgi-scriptcgipl

另外,如下,可以使给定目录下所有文件被视为CGI程序:

Options+ExecCGISetHandlercgi-script

注意,必须设置AllowOverrideOptions使这些指令生效。

更详细的有关CGI编程和配置的说明,请参见CGItutorial

最后注意事项:

一般来说,htaccess文件需要放在网站的根目录下才能控制整个站点,并且在Linux系统中,需要把其权限设置为644以提高安全性。国内很多主机提供商都通过一定技术手段禁用了该文件,但是国外大多数空间商都是支持该文件的,可以极大的扩展虚拟主机的功能

.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。

在实际应用中,用户最常用其重定向功能与伪静态功能,比如把一个PHP的动态页面定义成一个HTML后缀的静态页面URL形式,这种形式在用户端完全无法看出来,因此,伪静态也是SEO的一种重要手段。

本文件应该由UTF-8编码,或者不添加BOMWindows编码也可以。因此,不能使用Windows系统自带的记事本程序来编写Htaccess文件,常见的Notepad2等软件可以用来编写该文件。

如果手头没有编辑工具或者不方便下载,可以通过本站的“htaccess制作生成来自动处理这个文件。我们已经完全修正了这套程序中原来存在的很多错误,并且增加了很多使用的功能(比如直接下载),您可以放心使用。但由于服务器系统的不确定性,我们强烈建议您在上传之前,将原来的文件备份。本站不可能因使用这套程序造成的损失承担任何责任。

如果在.htaccess文件中写入了配置指令但不起作用,可能有多种原因。

最常见的原因是,AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置AllowOverrideNone。有一个很好的测试方法,即,在.htaccess文件随便增加点没用的内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了AllowOverrideNone

在访问文档时,如果收到服务器的出错消息,应该检查Apache的出错日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值