我敢打赌你不知道一些。 我们将.htaccess应用程序组合在一起以改善站点。 优化程序通常使用它来正确配置301重定向。 但是文件的可能性不限于此。 在这里,安全性,优化和显示设置-使用.htaccess,网站管理员可以做很多有用的事情来使站点正常工作。
.htaccess文件(“超文本访问”的缩写)将覆盖最流行的Apache Web服务器及其类似类型的设置。 下面是通过代码示例将.htaccess用于不同目的的方法。
为什么需要.htaccess以及在哪里寻找
该文件是优化程序任务的更灵活服务器设置所必需的。 如果您可以访问主服务器配置文件.httpd.conf或apache.conf,则不宜在.htaccess中设置规则(名称取决于操作系统的设置)。 更改生效更快,请求不会使服务器超载。 但是,例如在共享主机的情况下,通常没有这种访问权限。 然后,您必须通过.htaccess注册必要的设置。
具有.htaccess功能以进行站点优化:
- 为SEO设置重定向。
- 确保整个资源和各个部分的安全性。
- 设置网站的正确显示。
- 下载速度优化。
在哪里看以及如何编辑
如果.htaccess文件位于根文件夹中,则该命令操作将扩展到整个站点,但是您可以将其放置在任何目录中。 然后,这些指令将仅涉及特定的目录和子目录。 因此,一个资源可以具有几个.htaccess文件。 优先级位于目录中而不是根目录中的文件命令。
.htaccess是公认的最受欢迎的名称,但不是必需的(在httpd.conf文件中指定)。 尽管名称不同寻常,但是您可以在任何文本编辑器中创建和编辑文件。
某些CMS提供了通过管理面板编辑文件的功能。 在Bitrix中,可以在“内容-文件和文件夹”部分中轻松找到它:
在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重定向时,请记住以下两个规则:
- 避免多次连续的重定向-它们会增加服务器的负载并降低站点的速度。
- 将重定向从私有重定向到全局。 例如,首先从一个页面重定向到另一页面,然后一般重定向到带有斜线的页面。 该规则在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地址:
到特定文件
<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目录中,并添加以下命令:
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中的指令。
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生成器 。