.htaccess文件的19个有用功能

.htaccess文件的19个有用功能


我敢打赌你不知道一些。 我们将.htaccess应用程序组合在一起以改善站点。 优化程序通常使用它来正确配置301重定向。 但是文件的可能性不限于此。 在这里,安全性,优化和显示设置-使用.htaccess,网站管理员可以做很多有用的事情来使站点正常工作。


.htaccess文件(“超文本访问”的缩写)将覆盖最流行的Apache Web服务器及其类似类型的设置。 下面是通过代码示例将.htaccess用于不同目的的方法。



为什么需要.htaccess以及在哪里寻找


该文件是优化程序任务的更灵活服务器设置所必需的。 如果您可以访问主服务器配置文件.httpd.conf或apache.conf,则不宜在.htaccess中设置规则(名称取决于操作系统的设置)。 更改生效更快,请求不会使服务器超载。 但是,例如在共享主机的情况下,通常没有这种访问权限。 然后,您必须通过.htaccess注册必要的设置。


具有.htaccess功能以进行站点优化:


  • 为SEO设置重定向。
  • 确保整个资源和各个部分的安全性。
  • 设置网站的正确显示。
  • 下载速度优化。

在哪里看以及如何编辑


如果.htaccess文件位于根文件夹中,则该命令操作将扩展到整个站点,但是您可以将其放置在任何目录中。 然后,这些指令将仅涉及特定的目录和子目录。 因此,一个资源可以具有几个.htaccess文件。 优先级位于目录中而不是根目录中的文件命令。


.htaccess是公认的最受欢迎的名称,但不是必需的(在httpd.conf文件中指定)。 尽管名称不同寻常,但是您可以在任何文本编辑器中创建和编辑文件。


某些CMS提供了通过管理面板编辑文件的功能。 在Bitrix中,可以在“内容-文件和文件夹”部分中轻松找到它:


.htaccess文件的19个有用功能


在WordPress中,您可以使用Yoast SEO和All in One SEO Pack插件模块来编辑.htaccess。


如果缺少.htaccess文件,请在文本编辑器中将其创建,然后将其放置在站点的根文件夹中或所需的目录中(您将需要访问主机或通过ftp)。


语法.htaccess


该文件的语法很简单:每个指令(命令)都从新行开始,在#号之后,您可以添加服务器不会考虑的注释。 对该站点所做的更改将立即生效;不需要重新引导服务器。


设置规则,包括使用正则表达式。 为了阅读它们,您需要了解特殊字符和变量的含义。 解密最常用的。


主要特殊字符:


  • ^-行首;
  • $-行尾;
  • 。 -任何字符;
  • *-任意数量的字符;
  • ? -一个特定的角色;
  • [0-9]是字符序列,例如从0到9;
  • | -“或”符号,选择一个或另一个组;
  • ()-用于选择字符组。

主要变量是:


  • %{HTTP_USER_AGENT}-用户代理字段,由用户的浏览器传输;
  • %{REMOTE_ADDR}-用户的IP地址;
  • %{REQUEST_URI}-请求的URI;
  • %{QUERY_STRING}-在?号后查询参数。

对于那些想深入研究该主题的人-.htaccess的完整官方文档俄语的优质资源 。 我们将通过文件的主要功能来优化您的网站。


设置SEO重定向


正如我们提到的,这是使用.htaccess的最流行方法。 在配置这种或那种呼叫转移之前,请确保确实必要。 例如,在某些CMS中,默认情况下将重定向到带斜线的页面。 我们在博客上写了SEO的重定向设置。


设置301重定向时,请记住以下两个规则:


  1. 避免多次连续的重定向-它们会增加服务器的负载并降低站点的速度。
  2. 将重定向从私有重定向到全局。 例如,首先从一个页面重定向到另一页面,然后一般重定向到带有斜线的页面。 该规则在100%的情况下不起作用,因此您需要尝试使用指令的放置。

1.设置页面301重定向


在以下情况下,这是必需的:


  • 网站的结构已更改,页面的嵌套级别已更改;
  • 该页面已不复存在,但有必要保留其传入流量(例如,在没有商品的情况下,它们通常会重定向到产品类别);
  • URL已更改,这是非常不希望的,但是也发现了。

只是删除页面是一个坏主意,最好不要让漫游器出现404错误,而应将其重定向到另一个URL。 在这种情况下,有机会在发行和定向流量中不丢失站点的位置。 您可以使用简单的重定向指令将301重定向从一个页面配置到另一个页面:


Redirect 301 /page1/ https://mysite.com/page2/ 

  • /page1/ -从根开始的页面地址,不带协议和域。 例如, /catalog/ofisnaya-mebel/kompjuternye-stoly/
  • https://mysite.com/page2/重定向页面的完整地址,包括协议和域。 例如, https://dom-mebeli.com/ofisnaya-mebel/stoly-v-ofis/

2.摆脱困境


该网站的每一页都只能在一个地址访问。 为此,必须配置以下内容:


  • 重定向到URL末尾带有斜杠的页面,反之亦然;
  • 主镜像是搜索中的主站点地址。

可以使用mod_rewrite模块来完成。 它使用特殊命令- 复杂的重定向指令 。 第一个命令始终是启用URL转换:


 RewriteEngine On 

转发至斜线,反之亦然


在每种情况下,是重定向到带斜线还是不带斜线的页面,您都需要单独决定。 如果站点已经在搜索中积累了历史记录,请分析索引中哪些页面更大。 对于新站点,他们通常将重定向设置为斜杠。 检查默认情况下是否未配置重定向很简单:在URL的末尾删除/添加一个斜杠。 如果页面重新加载了新地址-我们有重复的地址,则需要进行配置。 如果替换了URL,则一切正常。 最好检查几个嵌套级别。


代码301重定向到斜杠:


 RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] 

代码301重定向到没有斜杠的页面:


 RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1 [R=301,L] 

3.设置主镜


首先,您需要确定哪个地址将成为搜索的主要地址。 SSL证书早已成为标头。 只需安装它,然后在.htaccess中添加规则即可。 记得还要在robots.txt中注册它。


HTTPS重定向


 RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

有几种方法可以确定主镜像是否带有“ www”:


  • 在两个版本的Yandex.Webmaster中添加一个站点,控制台将显示有关搜索引擎将哪个URL视为主镜像的信息;
  • 分析发行情况,查看网站的哪些页面在索引中更多;
  • 不管有没有www,无论有没有新资源,都会有一个地址,这是您的选择。

做出选择后,请使用两个代码选项之一。


从www重定向到没有www


 RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

没有www重定向到www


 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\..* [NC] RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301] 

4.我们从一个域重定向到另一个域


设置此重定向的最明显的原因是,当站点移至新域时,会将机械手和用户重定向到其他地址。 同样,优化程序也使用它来操纵参考质量,但是下降域和PBN是灰色促进技术,我们不会在本材料中涉及。


使用以下代码选项之一:


 RewriteEngine On RewriteRule ^(.*)$ http://www.mysite2.com/$1 [R=301,L] 


 RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.mysite1\.ru$ [NC] RewriteRule ^(.*)$ http://www.mysite2.ru/$1 [R=301,L] 

不要忘记将代码中的“ mysite1”和“ mysite2”分别更改为旧域和新域。


Promopult系统中的SEO模块 :对于那些不想在日常工作中淹死的人。 用于提高网站质量和搜索促进,过程自动化,清单,详细报告的所有工具。


我们提供网站安全


.htaccess文件为保护站点免受恶意脚本,内容盗窃和DOS攻击提供了绝佳的机会。 您还可以保护对特定文件和分区的访问。


5.我们禁止从您的站点下载图像


在某些技术中,第三方站点会使用内容(包括图像)通过热链接(指向文件的直接链接)直接从托管服务器下载内容。 这不仅侮辱并侵犯了版权,而且还会在服务器上造成不必要的额外负担。


围攻小偷用以下代码:


 Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https://(www.)?mysite.com/ [nc] RewriteRule .*.(gif|jpg|png)$ https://mysite.com/img/goaway.gif[nc] 

将“ mysite.com”替换为您的网站地址,并创建一条图像,上面附有任何一条消息,指出在https://mysite.com/img/goaway.gif窃取他人照片不适合。 该图像将显示在第三方资源上。


6.拒绝访问


使用.htaccess中的以下指令,可以拒绝来自特定IP地址,子网和恶意bot的整个不需要的访客组。


对于不需要的用户代理(机器人)


 SetEnvIfNoCase user-Agent ^FrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Java.* [NC,OR] SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR] SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR] SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR] SetEnvIfNoCase user-Agent ^Zeus [NC] <limit get=”” post=”” head=””> Order Allow,Deny Allow from all Deny from env=bad_bot </limit> 

用户代理列表可以补充,减少或自己创建。 好的和坏的机器人列表可以在这里找到。


这种禁令的一个特殊情况是禁止搜索机器人。 如果由于某种原因您对robots.txt中的规则不满意,则可以使用以下指令拒绝访问Googlebot,例如:


 RewriteEngine on RewriteCond %{USER_AGENT} Googlebot RewriteRule .* - [F] 

对于除指定IP外的所有IP


 ErrorDocument 403 https://mysite.com Order deny,allow Deny from all Allow from IP1 Allow from IP2  . . 

不要忘记将“ https://mysite.com”替换为您的站点地址,并输入IP地址而不是IP1,IP2等。


对于特定的IP地址


 allow from all deny from IP1 deny from IP2  . . 

对于子网


 allow from all deny from 192.168.0.0/24 

在“拒绝来源”之后的行中输入网络掩码。


垃圾邮件IP地址可以在服务器日志中或使用统计服务来计算。 WordPress管理仪表板显示评论者的IP地址:


.htaccess文件的19个有用功能


到特定文件


 <files myfile.html> order allow,deny deny from all </files> 

在示例中输入文件名而不是“ myfile.html”。 将向用户显示错误403-“访问被拒绝”。


出于安全原因,限制对.htaccess文件本身的访问不会是多余的,并且我们还建议您在设置所有规则之后在文件上设置444权限。


 <Files .htaccess> order allow,deny deny from all </Files> 

对于WordPress网站,重要的是限制对wp-config.php文件的访问,因为 它包含有关数据库的信息:


 <files wp-config.php> order allow,deny deny from all </files> 

对于来自特定站点的用户


您可以阻止访问者访问不需要的资源(例如,成人内容或令人震惊的内容)。


 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR] RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR] RewriteRule .* - [F] </ifModule> 

7.保护对特定文件或文件夹的访问


首先,创建一个.htpasswd文件,以用户:密码格式输入登录名和密码,并将其放置在站点的根目录中。 出于安全原因,最好对密码进行加密。 可以使用特殊服务生成记录来完成此操作,例如this 。 下一步是将目录或文件添加到.htaccess:


文件密码保护


 <files secure.php=””> AuthType Basic AuthName “” AuthUserFile /pub/home/.htpasswd Require valid-user </files> 

密码保护文件夹


 resides AuthType basic AuthName “This directory is protected” AuthUserFile /pub/home/.htpasswd AuthGroupFile /dev/null Require valid-user 

从服务器根目录指定.htpasswd文件的路径,而不是“ /pub/home/.htpasswd”。 我们建议在安装代码后检查访问权限。


8.我们禁止执行恶意脚本


以下指令组可保护网站免受所谓的“脚本注入”攻击-一种用于黑客攻击的工具:


 Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) RewriteRule ^(.*)$ index.php [F,L] 

所有损害您资源的尝试都将被重定向到403“拒绝访问”错误页面。


9.保护站点免受DOS攻击


保护方法之一是限制允许的最大请求大小(默认情况下没有限制)。


为此,请在.htaccess中以字节为单位设置下载文件的大小:


 LimitRequestBody 10240000 

在示例中,大小为10 MB。 如果要禁止下载文件,请写一个小于1 MB(1048576字节)的数字。


您还可以在官方文档中探索LimitRequestFields,LimitRequestFieldSize和LimitRequestLine指令的可能性。


自定义网站显示


让我们看看使用.htaccess在用户浏览器中显示整个资源或其部分时可以做什么。


10.替换索引文件


索引文件是在访问特定目录时默认打开的文件。 通常将它们称为:index.html,index.htm,index.php,index.phtml,index.shtml,default.htm,default.html。


这是目录结构的样子:


.htaccess文件的19个有用功能


要将其替换为其他文件,请将其放在.htaccess目录中,并添加以下命令:


 DirectoryIndex hello.html 

输入所需文件的地址,而不是“ hello.html”。


您可以指定如果其中一个文件不可用将按指定顺序打开的文件顺序:


 DirectoryIndex hello.html hello.php hello.pl 

11.在网址末尾添加或删除html


保留或删除URL中的文件扩展名是每个优化器的事。 没有地址扩展的影响对资源排名的可靠研究,但是每个网站管理员对此都有自己的见解。


要添加.html:


 RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?) RewriteRule .* %1.html [R=301,L] RewriteRule ^(.*)/$ /$1.html [R=301,L] 

删除.html:


 RewriteBase / RewriteRule (.*)\.html$ $1 [R=301,L] 

相同的指令可以添加/删除php扩展名。


12.设置编码


为避免浏览器显示资源时出错,您需要以创建站点的编码方式告诉它。 最受欢迎:


  • UTF-8-通用
  • Windows-1251-西里尔文
  • Windows-1250-中欧
  • Windows-1252-西欧
  • KOI8-R-西里尔字母(KOI8-R)

他们最经常使用UTF-8和Windows-1251。


如果未在每个页面的meta标记中指定编码,则可以通过.htaccess进行指定。


将文件设置为UTF-8编码的指令示例:


 AddDefaultCharset UTF-8 

这样的命令意味着所有上传到服务器的文件都将转换为Windows-1251:


 CharsetSourceEnc WINDOWS-1251 

这些示例显示了不同的编码,但是在同一站点内,这些指令中的编码必须匹配。


13.创建自定义错误页面


使用.htaccess中的规则,您可以配置针对最常见错误的特殊创建页面的显示,例如:


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

在编写指令之前,请在网站的根目录中创建错误文件夹,并将错误页面的相应文件放在此处。


为什么需要这个? 例如,为了不使用户在第404页上迷路,而是给他机会去网站的其他部分:


.htaccess文件的19个有用功能


我们优化网站


网站加载速度是搜索引擎中的排名因素之一。 您可以增加它,包括使用.htaccess中的指令。


14.使用mod_gzip或mod_deflate压缩站点组件


一方面,文件压缩可提高加载站点的速度,但另一方面,它可以更多地加载服务器。 在.htaccess中,可以使用两个模块-mod_zip和mod_deflate启用压缩。 它们的压缩质量几乎相同。


Gzip模块的语法更加灵活,可以与遮罩一起使用:


 <ifModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.* mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_exclude mime ^image/.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* </ifModule> 

在mod_deflate中,列出要压缩的文件类型:


 <ifModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript </ifModule> 

15.我们加强缓存


这组命令将有助于为已经访问过该网站的访问者快速加载该网站。 浏览器不会从服务器重新下载图片和脚本,而是会使用缓存中的数据。


 FileETag MTime Size <ifmodule mod_expires.c> <filesmatch “.(jpg|gif|png|css|js)$”> ExpiresActive on ExpiresDefault “access plus 1 week” </filesmatch> </ifmodule> 

在该示例中,缓存寿命限制为一周(“ 1周”),您可以以月(月),年(年),小时(小时)等指定周期。


另一个代码选项:


 <IfModule mod_expires.c> ExpiresActive On ExpiresByType application/javascript "access plus 7 days" ExpiresByType text/javascript "access plus 7 days" ExpiresByType text/css "access plus 7 days" ExpiresByType image/gif "access plus 7 days" ExpiresByType image/jpeg "access plus 7 days" ExpiresByType image/png "access plus 7 days" </IfModule> 

以下文件类型可用于缓存:


  • 图片/ x-icon;
  • 图片/ jpeg;
  • 图片/ png;
  • 图片/ gif;
  • 应用程序/ x-shockwave-flash;
  • 文字/ CSS;
  • 文字/ javascript;
  • 应用程序/ JavaScript;
  • 应用程序/ x-javascript;
  • 文字/ HTML;
  • 应用程序/ xhtml + xml。

更多的可能性


16.管理php设置


如果无法访问php.ini文件,则程序员可以完成此设置。 让我们关注php_value表达式,该表达式负责上传到站点的数据量和脚本的处理时间,因为 这直接影响性能。


 <ifModule mod_php.c> php_value upload_max_filesize 125M php_value post_max_size 20M php_value max_execution_time 60 </ifModule> 

在“ upload_max_filesize”行中,指示已下载文件的最大大小(以兆字节为单位),“ post_max_size”指的是最大发布量,“ max_execution_time”指示了处理脚本的时间(以秒为单位)。


17.打击WordPress上的垃圾邮件评论


为了阻止垃圾邮件发送者访问wp-comments-post.php文件,请将以下指令添加到.htaccess中:


 RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.*mysite.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L] 

输入您网站的地址,而不是“ mysite.com”。


18.为服务器管理员安装电子邮件


默认情况下,.htaccess中的此代码将设置管理员的电子邮件地址。 它将接收与服务器上重要事件有关的通知。


 ServerSignature EMail SetEnv SERVER_ADMIN admin@mysite.com 

19.我们警告该站点不可用


如果由于技术原因该站点不可用,您可以将用户重定向到包含有关何时恢复工作的信息的页面。 最好避免这种中断,但是在不可抗力的情况下,请将以下指令添加到.htaccess中:


 RewriteEngine on RewriteCond %{REQUEST_URI} !/info.html$ RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90 RewriteRule $ https://mysite.ru/info.html [R=302,L] 

在示例(12 \ .345 \ .678 \ .90)中,用您自己的IP地址替换,在最后一行中,使用有关完成的性质和时间的信息指示资源页面的地址。


一般.htaccess规则


  • 在进行更改以快速回滚之前,请始终备份文件。
  • 逐步进行更改,添加一条规则并评估其工作方式。
  • 如果将多个.htaccess文件放在不同的目录中,则仅在子目录中写入与特定目录相关的新指令,其余指令将从父目录或根文件夹中的文件继承。
  • 清除浏览器缓存:Safari上的Ctrl + F5,Mac OS:Cmd + R上的Ctrl +R。
  • 如果发生500错误,请检查规则的语法(对于错别字)。 您可以使用在线检查.htaccess文件的服务,例如。 如果没有发现错误,则在主配置文件中禁止使用这种类型的指令,您将必须咨询程序员和主机提供商。
  • .htaccess指令中不允许使用西里尔字符。 如果需要指定西里尔域的地址(moysite.rf),请使用任何whois服务使用punycode方法查找其拼写。 例如,地址“ site.rf”看起来像“ xn-80aswg.xn-p1ai / $ 1”。
  • .htaccess中的指令过多会降低网站的性能。 仅在无法以其他方式解决问题时,才尝试使用该文件。
  • 如果您没有时间详细研究指令的功能,请使用.htaccess生成器

Source: https://habr.com/ru/post/zh-CN462029/


All Articles