2020年.HTACCESS完整指南–从基础到进阶学习

披露: 您的支持有助于保持网站的正常运行!我们会为此页面上推荐的某些服务收取推荐费.


通过使用.htaccess文件,您可以控制Apache Web服务器的许多方面(及其许多变体)。在下面,您将学到设置特殊错误页面,密码保护目录,重定向等所有所需的知识。.

Contents

如何使用本指南

本指南旨在作为使用.htaccess的综合资源。如果您对使用.htaccess完全陌生,则可能要从下面的第一章“ .htaccess基础知识”开始.

如果要搜索特定的代码示例或教程,请查看此页面右侧的导航,以直接跳至该页面内的小节。.

.htaccess基础

在深入了解命令之前,让我们熟悉一些.htaccess基础知识.

什么是.htaccess?

.htaccess文件是一个配置文件,用于控制Web服务器如何响应各种请求。它受到多个Web服务器的支持,包括大多数商业Web托管提供商使用的流行的Apache Web服务器。.

.htaccess文件在目录级别运行,从而允许它们覆盖目录树中较高的.htaccess指令的全局配置设置.

.htaccess如何使用?

.htaccess的一些常见用法包括重定向URL,为网站(或网站页面)启用密码保护;显示自定义错误页面(例如404页面);并通过一致的尾随斜线策略提高SEO.

在后一种情况下,网站管理员可以选择是否要求在网站上每个URL的末尾加上斜杠.

为什么叫.htaccess?

.htaccess代表“超文本访问”。该名称源自该工具的原始用途,该用途是根据目录控制用户对某些文件的访问.

通过使用Apache的http.conf设置指令的子集,.htaccess允许系统管理员使用在相应的.htpasswd文件中指定的名称和密码来限制用户对单个目录的访问.

尽管.htaccess文件仍用于此操作,但它们也用于其他一些事项,我们将在本指南中介绍.

.htaccess文件在哪里?

从理论上讲,服务器上的每个文件夹(目录)都可以有一个。不过,通常情况下,您的网络根文件夹中有一个文件夹-该文件夹包含您网站的所有内容,并且通常标记为public_html或www.

如果您有一个包含多个网站子目录的目录,则通常在主根目录(public_html)中将存在一个.htaccess文件,而在每个子目录中(/ sitename)也将存在一个.htaccess文件。.

为什么找不到我的.htaccess文件?

在大多数文件系统上,以点(。)开头的文件名都是隐藏文件。这意味着默认情况下它们通常不可见.

但是他们并不难达到。您的FTP客户端或文件管理器应具有“显示隐藏文件”的设置。这将在不同程序中的不同位置,但通常位于“首选项”,“设置”或“文件夹选项”中。有时您会在“查看”菜单中找到它.

如果我没有.htaccess文件怎么办?

首先,请确保已打开“显示隐藏的文件”(或等效文件),以确保您实际上没有文件。通常,.htaccess文件是自动创建的,因此通常会有一个。但这并非总是如此.

如果您真的没有,可以轻松创建一个:

  • 在纯文本编辑器中启动新文件.
  • 将其以ASCII格式(不是UTF-8或其他格式)另存为.htaccess.
    • 确保它不是htaccess.txt或类似的名称。该文件应仅具有.htaccess名称,且没有其他文件扩展名.
  • 通过FTP或基于浏览器的文件管理器将其上传到适当的目录.

错误处理

使用.htaccess文件指定错误文档非常简单,这是使用此功能可以执行的最简单的操作之一.

什么是错误代码?

当对Web服务器提出请求时,通常尝试通过传递文档(对于HTML页面)或访问应用程序并返回输出(对于Content Management Systems和Windows Server 2003)来响应该请求。其他网络应用程序).

如果出现问题,将生成错误。不同类型的错误具有不同的错误代码。您可能熟悉404错误,如果无法在服务器上找到该文档,则会返回404错误.

服务器还可以响应许多其他错误代码.

客户请求错误

  • 400 —错误的请求
  • 401-需要授权
  • 402 —需要付款(尚未使用)
  • 403 —禁止
  • 404 —找不到
  • 405 —不允许的方法
  • 406-不可接受(编码)
  • 407-需要代理身份验证
  • 408 —请求超时
  • 409-要求冲突
  • 410 —去了
  • 411 —内容长度要求
  • 412 —前提条件失败
  • 413 —请求实体太长
  • 414 —请求URI太长
  • 415 —不支持的媒体类型.

服务器错误

  • 500内部服务器错误
  • 501-未实施
  • 502错误的网关
  • 503服务不可用
  • 504网关超时
  • 505 —不支持HTTP版本.

默认错误处理

如果您未指定任何类型的错误处理,则服务器将简单地将消息返回给浏览器,浏览器将向用户显示通用错误消息。这通常是不理想的.

指定错误文件

为您要处理的每个错误代码创建一个HTML文档。您可以随意命名这些名称,但是为它们命名可以帮助您记住它们的用途很有帮助,例如not-found.html或404.html。.

然后,在.htaccess文件中,指定每种错误类型要使用的文档.

ErrorDocument 400 /errors/bad-request.html
ErrorDocument 401 /errors/auth-reqd.html
ErrorDocument 403 /errors/forbid.html
ErrorDocument 404 /errors/not-found.html
ErrorDocument 500 /errors/server-err.html

请注意,每个指令都放在自己的行上.

就是这样。很简单.

备择方案 到.htaccess进行错误处理

大多数内容管理系统(CMS),例如WordPress和Drupal,以及大多数网络应用程序,都将使用自己的方式来处理其中的大多数错误代码.

.htaccess的密码保护

.htaccess文件的最初目的是基于每个用户限制对某些目录的访问(因此,其名称为超文本访问)。所以我们先来看.

.htpasswd

.htaccess系统的用户名和密码存储在文件名.htpasswd中.

它们分别以以下形式存储在一行中:

用户名:encryptedpassword

例如:

约翰史密斯:F418zSM0k6tGI

重要的是要意识到存储在文件中的密码不是用于登录的实际密码。而是密码的加密哈希.

这意味着密码已通过加密算法运行,并且存储了结果。用户登录时,将输入纯文本密码并通过相同的算法运行。如果输入相同,则密码匹配并且授予用户访问权限.

通过这种方式存储密码可以提高安全性-如果有人要访问您的.htpasswd文件,则他们只会看到哈希密码,而看不到原始密码。而且没有办法从散列中重建原始数据,这是一种单向加密.

可以使用几种不同的哈希算法:

  • 安全算法-使用以下算法之一
    • bcrypt —这是最安全的方法,但计算速度也最慢。它由Apache和Nginx支持.
    • md5-这是Apache当前版本使用的默认哈希算法。 Nginx不支持.
  • 不安全的算法-不要使用这些
    • crypt()—曾经是默认的哈希函数,但是它不是很安全.
    • SHA和盐渍SHA.

在命令行上创建用户名和密码

您可以直接从命令行或SSH终端创建.htpasswd文件,并向其中添加用户名-密码对。.

处理.htpasswd文件的命令就是htpasswd.

要创建新的.htpasswd文件,请使用带有-c选项的命令(用于创建),然后键入目录的路径(而不是URL,即服务器上的实际路径)。您还可以包括要添加的用户.

> htpasswd -c /usr/local/etc/.htpasswd约翰史密斯

这将在/ etc /目录中创建一个新的.htpasswd文件,并为名为johnsmith的用户添加一条记录。系统将提示您输入密码,该密码也将使用md5加密存储.

如果在指定位置已经有一个.htpasswd文件,则不会创建一个新文件-只需将新用户添加到现有文件中.

如果您希望使用bcrypt哈希算法,请使用-b选项.

不使用命令行进行密码哈希

如果您对使用命令行或SSH终端感到不舒服(或者由于某种原因无法访问它),则可以简单地创建一个.htpasswd文件,并使用纯文本编辑器填充该文件,然后上传通过FTP或文件管理器.

但是之后,您需要以某种方式加密密码,因为htpasswd命令会为您处理密码.

在线有许多.htpasswd加密实用程序。最好的可能是Aspirine.org上的htpasswd生成器.

这为您提供了一些哈希算法和密码强度的选项。您可以简单地将输出复制并粘贴到您的.htpasswd文件中.

哪里保存您的.htpasswd文件

您无需为每个.htaccess文件都有单独的.htpasswd文件。实际上,您不应该。在大多数情况下,整个虚拟主机帐户或主服务器目录都应该有一个.

.htpasswd文件不应位于可公共访问的目录中,也不能位于public_html或www或任何子目录中。它应该位于这些文件之上,位于只能从服务器本身访问的文件夹中.

如何在.htaccess中使用.htpasswd

每个目录可以具有自己的.htaccess文件,并具有自己的允许访问该文件的用户集.

如果您希望任何人(包括未登录的用户)访问目录及其文件,只需不执行任何操作-这是默认设置.

要限制访问,您需要在.htaccess文件中添加以下内容:

AuthUserFile /usr/local/etc/.htpasswd
验证名 "安全区名称"
AuthType基本

需要有效用户

第一行指定用户名和密码列表的路径和文件名。第二行指定安全区域的名称。这可以是您喜欢的任何东西。第三行指定“基本”身份验证,这通常是您需要的.

标记指定要限制的内容(在这种情况下,是获取或发布到目录中任何文件的能力)。在这对标记中,列出了允许访问文件的人员.

在上面的示例中,任何有效用户都可以访问文件。如果要将访问权限限制为特定用户或少数用户,则可以为其命名.

AuthUserFile /usr/local/etc/.htpasswd
验证名 "安全区名称"
AuthType基本

需要用户johnsmith
需要用户janedoe

您还可以将用户分组,并允许基于组的访问。这是通过添加另一个指定组的文件来完成的.

组文件(可以命名为.htgroups)如下所示:

管理员:约翰史密斯janedoe
工作人员:Jackdoe cindysmith

然后,您可以在.htaccess文件中指定它:

AuthUserFile /usr/local/etc/.htpasswd
AuthGroupFile /usr/local/etc/.htgroup
验证名 "行政区"
AuthType基本

需要群组管理员

.htpasswd的替代品

仅当您有大量静态文件时,才使用.htaccess和.htpasswd限制对服务器上某些文件的访问才有意义。该功能是在网站通常是HTML文档和相关资源的集合时开发的.

如果您使用的是WordPress或Drupal等内容管理系统(CMS),则可以使用内置的用户管理功能来限制或授予对内容的访问权限.

启用服务器端包含(SSI)

现在让我们了解什么是服务器端包含的组件以及如何使用它们.

什么是服务器端包括?

SSI或“服务器端包含”是一种轻量级脚本语言,主要用于将HTML文档嵌入到其他HTML文档中。这样可以很容易地重用常见的元素,例如页眉,页脚,侧边栏和菜单。您可以将其视为当今模板和内容管理系统的先驱.


SSI还具有条件指令(如果,否则,等等)和变量,使其成为一种完整的脚本语言,即使使用起来有些困难。 (通常,任何比几个包含项复杂的项目都会使开发人员选择更强大的语言,如PHP或Perl。)

启用S​​SI

默认情况下,某些Web托管服务器将启用“服务器端包含”。如果没有,则可以使用.htaccess文件启用它,如下所示:

AddType text / html .shtml
AddHandler服务器解析的.shtml
选项索引FollowSymLinks包括

这应该为所有扩展名为.shtml的文件启用SSI。.

.html文件上的SSI

如果要对.html文件启用SSI解析,则可以添加一条指令来完成此操作:

AddHandler服务器解析的.html

这样做的好处是您可以使用SSI,而无需让全世界都知道您正在使用它。另外,如果将来更改实现,则可以保留.html文件扩展名.

这样做的缺点是每个.html文件都将使用SSI进行解析。如果您有很多实际上不需要任何SSI解析的.html文件,则可能会导致大量不必要的服务器开销,从而减慢页面加载时间并占用CPU资源.

索引页面上的SSI

如果您不想解析所有.html文件,但是想在索引(主页)页面上使用SSI,则需要在.htaccess文件中指定.

这是因为,当您在网络服务器上查找目录的索引页时,它会查找index.html,除非您另有说明.

如果您不解析.html文件,则需要将索引页命名为index.shtml才能使SSI正常运行,并且服务器不知道默认情况下是否会查找.

为此,只需添加:

DirectoryIndex index.shtml index.html

这会警告Web服务器,index.shtml文件是该目录的主要索引文件。第二个参数index.html是备份,以防找不到index.shtml.

IP黑名单和IP白名单

您可以使用.htaccess阻止来自特定IP地址的用户(黑名单)。如果您已从引起问题的特定IP地址中识别了单个用户,这将非常有用.

您也可以执行相反的操作,将访问者以外的所有人都禁止访问特定IP地址(白名单)。如果您只需要限制批准的用户访问,这将很有用.

IP黑名单

要阻止特定的IP地址,只需使用以下指令以及相应的IP地址:

订购允许,拒绝
从111.22.3.4拒绝
从789.56.4拒绝.
允许所有人

第一行指出,将首先对allow指令进行评估,然后再执行deny指令。这意味着,all from将成为默认状态,然后只有那些与deny指令匹配的将被拒绝。.

如果将其反转为deny,allow命令,那么最后评估的将是all指令的allow,这将允许所有人,覆盖deny语句.

请注意第三行,该行拒绝了789.56.4。 —这不是完整的IP地址。这将拒绝该块内的所有IP地址(任何以789.56.4开头的IP地址).

您可以根据需要包含任意数量的IP地址(每行包含一个).

IP白名单

黑名单的相反是白名单-限制除您指定的人之外的所有人.

您可能会猜到,order指令必须颠倒过来,以便首先拒绝每个人,但随后允许某些地址.

拒绝,允许
所有人都否认
从111.22.3.4允许
允许自789.56.4.

阻止动作

.htaccess可用于按域或引荐来源阻止用户。您可以使用它来阻止机器人和抓取工具。让我们看看如何.

如何按域阻止用户

您还可以基于域名阻止或允许用户。这可以帮助阻止人们,即使他们从IP地址移动到IP地址.

但是,这对于可以控制其反向DNS IP地址映射的人来说是行不通的.

订购允许,拒绝
拒绝example.com
允许所有人

这也适用于子域-在上一个示例中,来自xyz.example.com的访问者也将被阻止.

如何通过引荐来源阻止用户

引荐来源网址是包含指向您网站的链接的网站。当有人点击指向您网站页面的链接时,他们来自的网站就是引荐来源.

不过,这不仅适用于指向您网站的可点击超链接.

互联网上任何地方的页面都可以使用带宽直接链接到您的图像(“热链接”),这可能会侵犯您的版权,而不会在流量方面给您带来任何好处。他们还可以热链接到您的CSS文件,JS脚本或其他资源.

大多数网站所有者对此表示满意,但是这种情况有时会变成滥用.

此外,有时实际的文本可点击超链接有时会出现问题,例如当它们来自敌对网站时.

由于以上任何原因,您可能希望阻止来自特定引荐来源网址的请求.

为此,您需要启用mod_rewrite模块。默认情况下,大多数网络托管服务商都启用了此功能,但如果不是(或不确定),通常可以向托管公司咨询。 (如果他们不能启用它,则可能要考虑新的主机。)

.htaccess指令完成基于引荐来源网址的阻止取决于mod_rewrite引擎.

被引荐来源网址阻止的代码如下所示:

在RewriteEngine上
RewriteCond%^ http://.*example.com [NC,OR]
RewriteCond%^ http://.*anotherexample.com [NC,OR]
RewriteCond%^ http://.*onemoreexample.com [NC]
RewriteRule。*-[F]

这有点棘手,所以让我们逐步了解一下.

第一行是RewriteEngine on,它通知解析器一系列与重写有关的指令即将到来.

接下来的三行分别阻塞一个引用域。您需要更改以供自己使用的部分是域名(示例)和扩展名(.com).

.com之前的反斜杠是转义字符。域名中使用的模式匹配是一个正则表达式,而点表示RegEx中的某些内容,因此必须使用反斜杠对其进行“转义”。.

括号中的NC指定匹配项不区分大小写。 OR是字面的“或”,表示还有其他规则在后面。 (也就是说,如果URL是一个或一个或多个,请遵循此重写规则。)

最后一行是实际的重写规则。 [F]表示“禁止”。具有与列表中的引荐来源匹配的引荐来源网址的任何请求都将失败,并传递403禁止错误.

阻止机器人和网络爬虫

网站管理更烦人的方面之一是发现您的带宽被非人类访问者(机器人,爬虫,网络抓取者)吞噬了.

这些程序旨在将信息从您的站点中拉出,通常是为了将其作为一些低级SEO操作的一部分进行重新发布而使用.

当然,那里有合法的bot,例如来自主要搜索引擎的bot。但是其余的就像害虫一样,它们只会消耗掉您的资源,并没有为您带来任何价值.

已经确定了数百种机器人。您将永远无法阻止所有这些,但您可以通过阻止尽可能多的活动来使活动停滞不前.

有一组有用的重写规则,可以阻止AskApache编译的400多个已知bot。.

指定目录的默认文件

当向Web服务器请求未指定文件名的URL时,大多数Web服务器中内置的假设是URL指向目录.

因此,如果您请求http://example.com,则Apache(和大多数其他Web服务器)将在域的根目录中查找(通常是/ public_html或类似名称,但可能是/ example-com)作为默认目录文件.

默认情况下,默认文件名为index.html。这可以回溯到互联网的开始,当时网站只是文档的集合,“主页”页面通常是这些文档的索引。.

但是您可能不希望index.html成为默认页面。例如,您可能需要其他文件类型,例如index.shtml,index.xml或index.php。.

否则,您可能不会将主页视为“索引”,而是想将其命名为不同的名称,例如home.html或main.html.

设置默认目录页面

.htaccess允许您轻松设置目录的默认页面:

DirectoryIndex [此处为文件名]

如果您希望默认设置为home.html,则可以轻松实现:

DirectoryIndex home.html

设置多个默认页面

您还可以指定多个DirectoryIndex:

DirectoryIndex index.php index.shtml index.html

这种工作方式是Web服务器先查找第一个。如果找不到,则寻找第二个,依此类推.

你为什么想做这个?当然,您知道要使用哪个文件作为默认页面,对?

请记住,.htaccess会影响其自己的目录以及每个子目录,直到被更本地的文件覆盖为止。这意味着您根目录中的.htaccess文件可以提供许多子目录的说明,并且每个子目录可能都有其自己的默认页面名称.

能够将这些规则放在根目录下的单个.htaccess文件中,这意味着您不必在每个目录级别都重复文件中的所有其他指令.

URL重定向和URL重写

.htaccess文件最常见的用途之一是URL重定向.

当文档或资源的URL更改时,应使用URL重定向。如果您重组了网站或更改了域名,这将特别有用.

301和302重定向

从浏览器的角度来看,有两种类型的重定向,即301和302。(这些数字表示由Web服务器生成的错误代码。)

301表示“永久移动”,而302表示“临时移动”。在大多数情况下,您想使用301。这将保留原始URL拥有的所有SEO资产,并将其传递到新页面.

这也将导致大多数浏览器更新其书签。大多数浏览器还将缓存旧到新的映射,因此当链接或用户尝试访问原始URL时,它们仅会请求新的URL。如果网址已永久更改,那么所有这些都是可取的结果.

很少有理由使用302重定向,因为很少有理由临时更改URL。更改URL永远是不希望的,但有时是必需的。临时更改它,然后计划稍后再更改,这是个坏主意,几乎总是可以避免的.

本节中的所有示例都将使用301重定向.

重定向与重写

使用.htaccess指令“更改” URL的方式有两种:重定向命令和mod_rewrite引擎.

“重定向”命令实际上将重定向消息发送到浏览器,告诉它要查找的其他URL.

通常,mod_rewrite工具将一个URL(请求中提供的URL)“翻译”为文件系统或CMS可以理解的内容,然后像处理翻译后的URL就是请求的URL一样处理请求。.

以这种方式使用时,网络浏览器不会注意到发生了任何事情-只会接收其要求的内容.

mod_rewrite工具还可用于产生301重定向,其工作方式与Redirect命令相同,但具有更多规则选项-mod_rewrite可能具有复杂的模式匹配和重写指令,而Redirect无法利用.

基本页面重定向

要将页面重定向到另一个URL,代码是:

重定向301 /relative-url.html http://example.com/full-url.html

此单行命令包含四个部分,每个部分用一个空格分隔:

  • 重定向命令
  • 重定向的类型(301-永久移动)
  • 原始页面的相对URL
  • 新页面的完整URL.

相对URL相对于包含.htaccess文件的目录,该文件通常是Web根目录或域的根目录.

因此,如果将http://example.com/blog.php移至http://blog.example.com,则代码为:

重定向301 /blog.php http://blog.example.com

重定向网站的大部分内容

如果您移动了目录结构,但是页面名称保持不变,则可能需要将对某个目录的所有请求重定向到新目录.

重定向301 /旧目录http://example.com/new-directory

重定向整个站点

如果您的整个网站都移到了新网址,该怎么办?简单.

重定向301 / http://newurl.com

将www重定向到非www

网站越来越远离www子域.

从来没有真正需要过它,但是从大多数操作网站的人使用服务器存储许多自己的文档,而www或“万维网”目录用于他们想要的内容的那一刻起与他人分享.

这些天来,有些人使用它,有些人却没有。不幸的是,某些用户仍然会自动键入www。习惯于每个URL前面。如果您不使用www,则要确保这些请求位于正确的位置.

为此,您需要使用mod_rewrite模块,该模块可能已安装在您的网络主机上.

选项+关注符号链接
在RewriteEngine上
RewriteCond%^ www.example.com [NC]
RewriteRule ^(。*)$ http://example.org/$1 [R = 301,NC]

小心!

许多其他的.htaccess和mod_rewrite指南提供了以下代码的一些变体来实现此目的:

选项+关注符号链接
在RewriteEngine上
RewriteCond%!^ example.com [NC]
RewriteRule ^(。*)$ http://example.org/$1 [R = 301,NC]

你看到这个问题了吗?

它将所有子域重定向到主域。因此,不仅是www.example.com,而且还有blog.example.com和admin.example.com等。这可能不是您想要的行为.

重定向到www

但是,如果您使用的是www子域,该怎么办?

您可能应该设置重定向,以确保人们到达他们要去的地方。尤其是现在越来越少的人可能会自动将www添加到URL的开头.

您只需反转上面的代码.

RewriteEngine开
RewriteCond%^ example.com [NC]
RewriteRule ^(。*)http://www.website.com/$1 [R = 301,NC]

我应该将404错误重定向到首页吗?

有关.htaccess重定向的几本指南,包括有关如何使404错误重定向到首页的说明.

这是一个很好的例子,说明仅仅因为您可以做某事,并不意味着您应该做某事.

将404错误重定向到网站首页是一个糟糕的主意。这会使访问者感到困惑,他们无法弄清楚为什么他们看到网站的首页而不是正确的404错误页面.

所有网站都应该有一个自定义的404页面,该页面向用户清楚地说明找不到内容,并且理想情况下,它提供一些搜索功能来帮助用户找到所需的内容.

为什么使用.htaccess代替替代方法?

您可以在PHP文件或任何其他类型的服务器端脚本中设置重定向。您也可以在您的内容管理系统中进行设置(基本上是一样的).

但是,使用.htaccess通常是最快的重定向类型。使用基于PHP的重定向或其他服务器端脚本语言时,必须完成整个请求,并在将重定向消息发送到浏览器之前对脚本进行实际解释。.

使用.htaccess重定向,服务器将使用重定向消息直接响应请求。这快得多.

不过,您应该注意-一些内容管理系统实际上是通过以编程方式更新.htaccess来管理重定向的。以WordPress为例,它具有以这种方式工作的重定向插件。 (WP的漂亮URL系统也可以做到这一点。)

这为您提供了直接使用.htaccess的性能,同时还为您提供了从应用程序内部进行管理的便利.

隐藏.htaccess文件:安全注意事项

没有理由应该有人可以从网上查看您的.htaccess文件.

此外,出于某些重要原因,您绝对不应该希望其他人看到您的.htaccess文件.

最大的问题是,如果您使用的是.htpasswd文件,则其位置在.htaccess文件中详细说明。知道在哪里可以找到它.

此外,一般而言,您不希望向公众提供有关实施的详细信息.

重写规则,目录设置,安全性(您使用.htaccess进行的所有操作)是一种很好的安全性做法,将所有这些隐藏在后台都隐藏在Web服务器上。黑客越能了解您的系统,越容易受到侵害.

从公共视图隐藏您的.htaccess文件非常容易。只需添加以下代码:

订购允许,拒绝
所有人都否认

启用MIME类型

MIME类型是文件类型。由于它们与电子邮件的原始关联,因此被称为MIME类型(MIME代表“多用途Internet邮件扩展名”)。它们不只是被称为“文件类型”,因为MIME暗示了一种用于指定文件类型的特定格式.

如果您曾经编写过HTML文档,即使您不知道它,也可能已经指定了MIME类型:

type属性引用特定的MIME类型.

服务器上的MIME类型

有时,您会发现您的网络服务器未配置为提供特定类型的文件。只是行不通-文件请求完全失败.

在大多数情况下,可以通过将MIME类型添加到.htaccess文件中来解决此问题。.

AddType文本/ RTFRTX

该指令分为三部分,每部分之间用空格隔开:

  • AddType命令
  • MIME类型
  • 文件扩展名.

如果要将多个不同的文件扩展名与相同的MIME类型相关联,则可以在一行上完成此操作.

AddType图片/ jpeg jpeg jpg jpe JPG

通过MIME类型强制下载

如果您希望所有指向特定文件类型的链接都作为下载启动,而不是在浏览器中打开,请使用MIME类型application / octet-stream进行操作,如下所示:

AddType应用程序/八位字节流pdf

同样,您可以使用一种类型指定多个文件扩展名:

AddType应用程序/八位字节流pdf doc docx rtf

文件扩展名和MIME类型列表

这是文件格式和相关MIME类型的不完全列表.

如果您是在管理自己的网站,并且知道在其中发布资源的文件类型,则无需将整个列表粘贴到您的.htaccess文件中.

但是,如果您运行的网站上有许多其他人正在贡献和发布内容,则您可能只想以这种方式允许大量文件类型,以确保没有人遇到不良的经历.

如果您在一个人们可能专门共享许多文件的站点上运行,则尤其如此,例如文件共享站点,项目管理应用程序(其中许多文件通常会附加到项目中)或处理以下内容的Web应用程序电子邮件.

AddType应用程序/ macbinhex-40 hqx
AddType应用程序/网络
AddType应用程序/网络链接
AddType应用程序/八位字节流bin exe
AddType应用程序/ oda oda
AddType应用程序/ pdf pdf
AddType应用程序/后记AI EPS PS
AddType应用程序/ rtf rtf
AddType应用程序/ x-bcpio bcpio
AddType应用程序/ x-cpio cpio
AddType应用程序/ x-csh csh
AddType应用程序/ x导演dcr
AddType应用程序/ x导演目录
AddType应用程序/ x导演dxr
AddType应用程序/ x-dvi dvi
AddType应用程序/ x-gtar gtar
AddType应用程序/ x-hdf hdf
AddType应用程序/ x-httpd-cgi cgi
AddType应用程序/ x-latex乳胶
AddType应用程序/ x-mif mif
AddType应用程序/ x-netcdf nc cdf
AddType应用程序/ x-onlive SDS
AddType应用程序/ x-sh sh
AddType应用程序/ x-shar shar
AddType应用程序/ x-sv4cpio sv4cpio
AddType应用程序/ x-sv4crc sv4crc
AddType应用程序/ x-tar tar
AddType应用程序/ x-tcl tcl
AddType应用程序/ x-tex tex
AddType应用程序/ x-texinfo texinfo texi
AddType应用程序/ x-troff t tr roff
AddType应用程序/ x-troff-man man
AddType应用程序/ x-troff-me me
AddType应用程序/ x-troff-ms ms
AddType应用程序/ x-ustar ustar
AddType应用程序/ x-wais-source src
AddType应用程序/ zip zip
AddType音频/基本音频
AddType音频/ x-aiff aif aiff aifc
AddType音频/ x-midi中音
AddType音频/ x-pn-realaudio ram
AddType音频/ x-wav WAV
AddType图片/ gif gif GIF
AddType图片/图片
AddType图片/ jpeg jpeg jpg jpe JPG
AddType图片/ tiff tiff tif
AddType图片/ x-cmu-raster ras
AddType图片/ x便携式任何地图pnm
AddType图片/ x便携式位图pbm
AddType图片/ x-便携式灰色地图pgm
AddType图片/ x便携式像素图ppm
AddType图片/ x-rgb rgb
AddType图片/ x-xbitmap xbm
AddType图片/ x-xpixmap xpm
AddType图片/ x-xwindowdump xwd
AddType文本/ html html htm
AddType文本/纯文本txt
AddType文本/ RTFRTX
AddType文本/制表符分隔值tsv
AddType text / x-server-parsed-html shtml sht
AddType文本/ x-setext etx
AddType视频/ mpeg mpeg mpg mpe
AddType video / quicktime qt mov
AddType video / x-msvideo avi
AddType视频/ x-sgi-电影
AddType x-world / x-vrml wrl

阻止热链接

热链接是一种链接到其他域的资源的做法,而不是将内容上传到您自己的服务器并自己提供服务.

假设您在自己喜欢的网站上找到了图片,并且想在自己的网站上使用它。暂时忽略版权问题-您可以像正常一样下载图像,将其上传到您的网站并嵌入到您的页面中.


但是,如果您懒惰,试图节省带宽或者不知道如何上传文件,则可以直接将其嵌入到原始文件中.

这是热链接。 CSS和JS文件也会发生这种情况,但是图像是最常见的.

某些网站/托管服务商根本不介意这样做,您可以通过Wikipedia链接图像,而不会感到烦恼。有些网站以一种或另一种形式鼓励它.

例如,JQuery通过CDN(内容交付网络)提供其JS库,因此您可以直接热链接到它,而不必上传它并从您自己的服务器提供它.

但是许多Web主机认为热链接是带宽和资源窃取的一种形式.

可以肯定的是,如果您运行的是一个相对较小的网站,那么您每天就无法承受成千上万的请求,这些请求与您网站上的实际访问者无关.

如果您在热链接方面遇到问题,可以通过将一些mod_rewrite规则添加到.htaccess文件中来禁用它.

在RewriteEngine上
RewriteCond%!^ $
RewriteCond%!^ http://(www。)?example.com /.*$ [NC]
RewriteRule。(gif | jpg | jpeg | png | js | css)$-[F]

确保将第三行中的example.com更改为您的实际域名。这将捕获任何不是来自您的域的请求,然后检查它是否与第四行中指定的文件扩展名之一匹配。如果匹配,则请求失败.

如果要添加其他文件扩展名,则只需编辑最后一行.

提供替代内容

如果您想让全世界知道为什么他们的热链接突然停止工作,可以用特殊的图像替换一条热链接的图像,并显示一条消息,例如“我们讨厌热链接!”。或“可从http://example.com获得的原始内容”.

无需使请求失败,您只需将其重定向到“特殊”映像即可:

在RewriteEngine上
RewriteCond%!^ $
RewriteCond%!^ http://(www。)?example.com /.*$ [NC]
RewriteRule。(gif | jpg)$ http://www.example.com/no-hotlinking.jpg [R,L]

如果您真的想惹人讨厌,可以将JavaScript或CSS文件重定向到特殊的替代方法,这些替代方法可能会对热链接程序产生不利的影响。不建议这样做,但是.

在RewriteEngine上
RewriteCond%!^ $
RewriteCond%!^ http://(www。)?example.com /.*$ [NC]
RewriteRule。(js)$ http://www.example.com/break-everything.js [R,L]

在RewriteEngine上
RewriteCond%!^ $
RewriteCond%!^ http://(www。)?example.com /.*$ [NC]
RewriteRule。(css)$ http://www.example.com/super-ugly.css [R,L]

禁用或启用索引

如果您的目录中充满了文档或其他资源,没有index.html文件,并且没有在.htaccess文件中指定默认目录页,该怎么办?

在许多情况下,结果将是列出目录中所有文件的通用目录.

那就对了。如果您的托管目录中有一个标记为/ images的文件夹,并且没有index.html页,则当有人导航到http://yousite.com/images时,他们将能够看到您目录中所有图像的列表。现场.

这是大多数网络服务器的默认行为,从网站最初的概念来看,它只是保存和共享文档的地方,这是有道理的。但这不是大多数网站的理想行为.

禁用索引

许多Web托管帐户已将其禁用为全局配置的一部分。但并非所有人都这样做.

如果需要禁用自动生成的目录列表,则很容易:

选项-索引

启用索引

如果您的Web服务器已禁用索引作为全局配置的一部分,但是您确实希望使用它们,则可以通过上述命令的相反操作来启用它们.

选项+索引

隐藏索引中的某些文件

如果要显示目录列表,但要从列表中隐藏某些文件类型,也可以这样做.

IndexIgnore * .gif * .jpg

*是通配符。上面的指令将隐藏所有扩展名为.gif或.jpg的文件。如果您想更具体一点,可以:

IndexIgnore secret-image.jpg

随处启用CGI

CGI,或通用网关接口,是一种服务器端方法,用于在网页中包含非HTML脚本(如Perl或SSI).

通常,CGI脚本存储在标记为/ cgi-bin的文件夹中。将Web服务器配置为将该目录中的任何资源视为脚本而不是页面.

这样做有两个问题:引用CGI资源的URL中必须包含/ cgi-bin /,这会将实现细节放入您的URL中–由于多种原因,应避免使用反模式.

复杂的网站可能需要更好的组织结构,而不是简单地将大量脚本塞入单个/ cgi-bin文件夹中.

如果您希望Web服务器解析CGI脚本,而不管它们在目录结构中的什么位置,只需将以下内容添加到.htaccess文件中:

AddHandler cgi-script .cgi
选项+ ExecCGI

如果您要将其他文件扩展名作为CGI脚本处理,则可以在第一行中添加它们.

脚本作为源代码

在大多数情况下,您将脚本放在Web目录中是因为您希望它们作为脚本运行.

但是有时候那不是您想要的。有时您想向公共访问者显示源代码,而不是运行脚本.

如果您运行文件共享服务或代码存储库站点,并且希望人们看到源代码并能够下载源代码,则可能是这种情况,但是脚本实际上是站点功能的一部分.

可以通过删除某些文件类型的脚本处理程序并将其替换为文本处理程序,在您的.htaccess文件中完成此操作.

RemoveHandler cgi-script .pl .cgi .php .py
AddType文字/纯文字.pl .cgi .php .py

另外,如前所述,您可以强制使用这些扩展名的文件自动下载而不是显示.

RemoveHandler cgi-script .pl .cgi .php .py
AddType application / octet-stream .pl .cgi .php .py

但是,请谨慎使用其中任何一个。如果您只希望以这种方式显示某些文件,但仍将这些脚本用于网站的其余部分,那么如果将该指令放入Web根目录的.htaccess文件中,您将遇到麻烦。.

更好的做法是将所有此类“仅显示”脚本放入单个目录,然后将指令放入该文件夹中的.htaccess文件中.

配置PHP设置

有时您需要调整PHP的设置。正确的方法是在名为php.ini的文件中.

不幸的是,并非所有的Web托管公司都允许其客户编辑php.ini文件。对于共享托管服务提供商尤其如此,其中单个安装的PHP可能正在运行数百个网站.

幸运的是,有一种解决方法-您可以将php.ini规则嵌入到.htaccess文件中.

语法如下:

php_value [设置名称] [值]

因此,例如,如果您需要增加最大文件上传大小(一个常见问题),则很简单:

php_value upload_max_filesize 10M

并非所有的PHP设置都可以在.htaccess文件中指定。例如,您不能这样禁用disable_classes.

有关所有php.ini设置的完整列表,请参见官方php.ini指令指南.

如何防止访问您的PHP包含文件

有几种方法可以防止未经授权访问您的PHP包含文件.

首先,您可以将它们放入目录并设置.htaccess文件以拒绝对该目录的所有访问(即,如果您使用的是Apache HTTP Server,则全部拒绝)。如果有人尝试访问该文件,他们将收到一个 禁止使用HTTP 403 响应.

或者,您可以将这些文件存储在提供网站文件的目录之外。也就是说,如果您的网络服务器正在提供位于 / srv / home, 您可以将包含文件放在 / srv / home / includes. 尽管您可以按以下方式访问和使用文件,但这使文件无法通过URL访问:include’PATH_TO_YOUR_FILE’

最后,您可以为要访问的文件定义URL常量:

define(’WEBSITE_URL’,’http://example.com’);

然后,对于不需要访问的文件,请进行以下检查:

if(!defined(’WEBSITE_URL’)){
标头($ _SERVER ["SERVER_PROTOCOL"] . "403禁止");
出口;
}

如何防止访问您的PHP ini文件

防止未经授权访问ini文件的方法是编辑.htaccess文件以拒绝对ini文件的访问(即,如果使用Apache,则全部拒绝).

如何设置服务器的时区

您可以通过在.htaccess文件中指定服务器时区来进行设置。为此,您需要添加以下行:

php_value date.timezone’区域/区域’

确保将“地区/区域”替换为您希望的时区.

保存文件。您可以通过在与.htaccess文件相同的目录中创建一个包含以下内容的PHP测试文件来测试您的更改:

<?php phpinfo(); ?>

在浏览器中加载文件,并搜索指令的名称-其“本地值”列应显示新的时区设置.

何时不使用.htaccess

第一次编辑.htaccess文件可能会使您突然感觉到对Web托管环境的强大影响。您突然觉得自己像个系统管理员.

不幸的是,这种力量可以发挥作用,并且您可能会发现自己使用.htaccess文件的方式并不是最好的.

当您需要执行类似.htaccess之类的工作时,基本上在两种情况下,您应该将该指令放在其他位置.

进一步上游

尽可能在.htaccess文件中放置的指令类型最好放在httpd.conf文件中,该文件是整个服务器的配置设置文件.

同样,PHP设置更恰当地属于php.ini文件,并且大多数其他语言具有类似的配置设置文件.

在httpd.conf,php.ini或其他特定于语言的配置文件中,将指令放置在更上游的位置,可以将这些设置“嵌入”到Web服务器的解析引擎中。使用.htaccess,必须在每个单个请求中检查和解释指令.

如果您的网站访问量很少,只有少量的.htaccess指令,那么这没什么大不了的。但是,如果您有很多流量,并且有很多指令,那么性能滞后可能会加起来.

不幸的是,许多共享的托管服务提供商不允许客户访问httpd.conf或php.ini文件,从而迫使用户只能使用速度较慢的.htaccess文件。.

与自定义VPS配置相比,这提供了双重惩罚,因为共享主机通常也功耗较低。这是流量可观的网站应该使用VPS计划而不是共享主机计划的原因之一.

进一步下游

如果您使用的是诸如WordPress或Drupal之类的优质内容管理系统(CMS),则可以在应用程序内部完成.htaccess文件中的某些操作(例如重定向URL或阻止IP地址)。.

通常,这与.htaccess文件结合使用,而应用程序以编程方式添加了指令.

如果可用,通常最好是从应用程序内部完成这些任务,而不是自己编辑.htaccess文件。如果您使用经过良好测试的开源插件,则不太可能引入错误和不兼容的指令.

故障排除

麻烦处理.htaccess文件可能很不错-但它也可能导致服务器忙碌起来并开始传送500条内部服务器错误消息.

这里有一些想法可以帮助您.

一次做一件事情

这应该不用说,但是-可悲的是-这是我们许多人必须反复学习的一课.

做一件事。然后测试一下。然后做另一件事。测试那个.

如果您一次执行多项操作,然后又失败了,您将不知道是哪个指令导致了问题.

在执行每个操作之前备份文件

除了一次只做一件事,您还应该在尝试的每件事之间保存文件。您保存的档案需要恢复。这不是Microsoft Word,您只能在其中撤消-您需要保存文件的副本.

您应该始终拥有最新的可用版本,以防万一。总是,总是,总是有能力还原到工作版本.

如果您使用某种源管理系统(如git),这是最简单的。您可以在每次更改后提交,如果遇到任何问题,请回退.

检查错误日志

如果您确实遇到问题,并且很难找出原因,请检查您的Apache错误日志。这些通常会提供有关在哪里寻找的有价值的信息.

使用开发者论坛获取帮助

开发者论坛和Q&即使对于经验最丰富的开发人员和系统管理员来说,StackOverflow之类的网站也是无价的工具。别忘了Google。通常,一个糟糕的网站管理员与一个出色的网站管理员之间的区别是,不知道答案,不知道在哪里找到答案.

常见的.htaccess问题

有时您打错了字。有时,由于无法预测的因素的融合,您会遇到一个深奥而令人困惑的问题.

大多数问题,以及真正令人沮丧的问题,都是中间的问题-如果您只知道这些简单的日常问题,就可以轻松解决.

这里有一些.

文件名错误

拼写.htaccess的方法只有一种-它必须以点开头,并且必须使用所有小写字母.

看起来很蠢,但是如果您的.htaccess文件没有达到您的期望,那应该是您检查的第一件事.

.htaccess禁用或部分禁用

一些共享的托管服务提供商完全禁用.htaccess。其他人允许这样做,但是限制某些指令的使用-如果包含这些指令,它们只会被忽略.

同样,即使在VPS计划或您自己的专用服务器上,.htaccess也可能被禁用.

如果您有权访问httpd.conf文件或其他服务器设置,则可以自己检查。如果找到指令AllowOverride None,则找到了罪魁祸首。将其替换为AllowOverride All.

如果您无权访问httpd.conf文件(例如,因为您在共享主机上),则可能需要与托管公司的技术支持联系,以查看他们是否可以为您启用它,或者为您提供建议现在可以以不同的方式完成您要尝试的工作.

指令冲突或被覆盖

如果您有多个嵌套目录,则每个目录可能都有自己的.htaccess文件。从根到每个嵌套目录的每个.htaccess文件都适用-按顺序读取它们,从目录树向下.

如果您在根目录中设置了某些内容,然后子目录中的内容将其覆盖,则.htaccess文件中最接近请求文件的指令将优先.

另请参阅我们的mod-rewrite备忘单!

.htaccess常见问题

  • 什么是SEO中的.htaccess文件?

    .htaccess文件可用于执行与SEO相关的任务,例如重定向。重定向可用于避免404错误消息,并使搜索引擎抓取工具知道应将哪些页面编入索引。您还可以设置HTTP标头以提高页面加载速度,这可能会提高搜索引擎排名.

    另外,您可以使用.htaccess来制定一致的尾随斜杠策略。结合www和HTTPS规则,可以帮助您避免重复的内容,Google可能会对其进行处罚.

  • 如何在WordPress中创建.htaccess文件?

    要在WordPress中创建.htaccess文件,请使用以下代码:

    #开始WordPress

    RewriteEngine开
    RewriteBase /
    RewriteRule ^ index \ .php $-[L]
    RewriteCond%{REQUEST_FILENAME}!-f
    RewriteCond%{REQUEST_FILENAME}!-d
    RewriteRule。 /index.php [L]

    #结束WordPress

    请注意,当您安装WordPress时,将自动创建.htaccess文件。但是,有故障的插件可能会损坏.htaccess文件,从而需要重新创建该文件。.

  • 为什么看不到我的.htaccess文件?

    如果看不到您的.htaccess文件,是因为该文件不存在或已被隐藏。要强制FTP客户端显示这些文件,您需要更改客户端设置(即,在FileZilla中,转到 服务器 > 强制显示隐藏文件)。如果进行了此更改,但仍然看不到.htaccess,则需要重新创建它.

  • 我应该拥有几个.htaccess文件?

    大多数网站不需要多个.htaccess文件。这是因为.htaccess文件使您可以按目录对服务器配置进行更改。但是,在托管多个站点或复杂的应用程序时,某些网站管理员可能会在每个站点上使用多个文件以执行高级功能.

  • cPanel中的.htaccess在哪里?

    要查看.htaccess文件,请登录到您的cPanel帐户。然后去 档案 > 文件管理器. 当要求选择目录时,请选择 网络根 并确保 显示隐藏文件 被检查。您现在应该可以在cPanel中查看.htaccess文件.

  • .htaccess文件在CodeIgniter中的用途是什么?

    .htaccess文件可以与CodeIgniter结合使用,以创建对搜索引擎友好的URL。默认情况下,CodeIgniter URL包括index.php文件。通过使用.htaccess,您可以删除默认的index.php文件,以便它不会出现在应用程序的所有URL中.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map