.htaccess 文件的功能

修改于 Sat, 11 May 2024 在 05:29 PM

.htaccess(超文本访问)文件旨在更改特定目录及其子目录的服务器设置。 这是 Apache 服务器特定的文件,不适用于 Nginx 或 Microsoft IIS。

为什么需要 .HTACCESS 文件?

使用 .htaccess 文件,您可以进行以下设置:

  • 设置处理 URL 的规则以及设置重定向;

  • 授权设置;

  • 限制某些 IP 地址和浏览器的访问;

  • 自定义错误页面;

  • 编码管理;

  • 传输附加标头;

  • PHP 设置。

  • 等等。

.HTACCESS 文件位于哪里?

默认情况下,在流行的 CMS 中,.htaccess 文件位于站点的根目录中。 如有必要,如果需要单独的规则,可以将其添加到子目录中。

.HTACCESS 文件设置

更改主页

您可以使用 DirectoryIndex 指令更改站点的主页。 为此,主页的文件名在 .htaccess 中指定。

例如:

DirectoryIndex index.php index.html

请注意,您可以列出多个文件,并用空格分隔; 如果服务器找不到第一个文件,它将使用第二个文件。

更改错误页面

在 .htaccess 文件中,您可以用自己的错误页面替换标准错误页面。
ErrorDocument 指令将指定 Web 服务器在发生特定错误时应显示哪个页面。

ErrorDocument 403 /403.html ErrorDocument 404 /404.html ErrorDocument 500 /500.html

在此示例中,我们指定了使用哪些站点文件来显示 403、403 和 500 错误。

设置编码

要通过 .htaccess 设置字符集,可以使用 AddDefaultCharset 指令。

AddDefaultCharset UTF-8

在这种情况下,站点将设置为以 UTF-8 编码提供页面。 还可以使用 PHP 的 php_value 更改编码。

php_value default_charset utf-8

在 .HTACCESS 中配置转发

您可以使用 Redirect 和 mod_rewrite 规则配置重定向。

更改 PHP 设置

使用 .htaccess 文件中的 php_value 可以更改 PHP 设置,例如:

  • 用于脚本执行的内存量;

  • 脚本执行时间;

  • 下载文件的大小。

.HTACCESS 中的缓存设置

在 .htaccess 中正确配置缓存将减少服务器上的负载并加快向用户交付网站页面的速度。 让我们看看在 .htaccess 中配置缓存的几种方法。

<IfModule mod_expires.c>    # Включаем кэширование    ExpiresActive On    # Устанавливаем время жизни кэша для статических файлов    ExpiresByType image/jpeg "access plus 1 year"    ExpiresByType image/png "access plus 1 year"    ExpiresByType image/gif "access plus 1 year"    ExpiresByType image/x-icon "access plus 1 year"    ExpiresByType text/css "access plus 1 month"    ExpiresByType text/javascript "access plus 1 month"    ExpiresByType application/javascript "access plus 1 month" </IfModule>

此代码包含 mod_expires 模块,该模块允许您设置静态文件(图像、样式和脚本)的缓存生命周期。 在示例中,我们将图像的缓存寿命设置为 1 年,将样式和脚本的缓存寿命设置为 1 个月。

如果服务器没有mod_expires模块,那么你可以使用mod_headers。 在包含图像的目录中创建一个 .htaccess 文件,并向其中添加以下规则。

 # Включаем кэширование <IfModule mod_headers.c>    # Устанавливаем время жизни кэша на 1 день    Header set Cache-Control "max-age=86400, public" </IfModule>

在本例中,我们将目录中所有文件的缓存设置为 86400 秒(24 小时)。

请注意,在共享主机方面,根据搜索引擎的建议,默认启用静态文件的缓存。

使用密码保护目录

.htaccess 文件可用于对目录进行密码保护。

# Указываем тип авторизации AuthType Basic # Указываем путь к файлу для хранения списка пользователей AuthUserFile /var/www/.htpasswd # Указываем, что авторизированный пользователь будет иметь доступ Require valid-user

要创建包含用户数据的文件,您可以使用 Apache 中包含的 htpasswd 实用程序。 例如,要在/var/www目录下创建用户admin、密码password的.htpasswd文件,可以使用以下命令:

htpasswd -c /var/www/.htpasswd admin

运行此命令时,系统将提示您输入管理员用户的密码。

禁止IP地址访问

如有必要,在 .htaccess 中,您可以使用 Deny from 指令来阻止对某些 IP 地址的访问。

# Ограничение доступа с IP-адреса 127.0.0.1 Deny from 127.0.0.1 # Ограничение доступа для подсети 127.0.0.1/24 Deny from 127.0.0.1/24 # Ограничение доступа для всех IP-адресов Deny from all

.HTACCESS 中用户代理的访问限制

您可以使用 .htaccess 文件保护您的网站免受机器人和机器人的侵害。 为此,您需要使用浏览器阻止(用户代理)。

RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (bot|crawl|spider) [NC] RewriteRule .* - [F]

此代码会阻止任何在 HTTP_USER_AGENT 标头(通常是浏览器或机器人/机器人的名称)中包含单词 bot、crawl 或 Spider 的请求。

在这里,我们将所有使用 Internet Explorer 浏览器的用户重定向到 /eol.html 页面:

RewriteEngine on RewriteCond %{HTTP_USER_AGENT} MSIE RewriteCond %{REQUEST_URI} !^/eol.html$ RewriteRule ^(.*)$ /eol.html [R=301,L]

控制目录中文件的查看

如果目录下没有index.php或index.html文件,可以使用.htaccess文件中的规则来配置文件和目录的查看; Options 指令负责此操作。

例如,要阻止查看目录的内容,您可以使用以下规则:

Options -Indexes

允许查看目录内容:

Options +Indexes

通过扩展名限制对文件的访问

在 .htaccess 中,您可以拒绝访问具有特定扩展名的文件。 <FilesMatch> 指令用于此目的。

例如,让我们拒绝访问扩展名为 .php 的文件:

<FilesMatch "\.php$">  Order Allow,Deny  Deny from all </FilesMatch>

同样,您可以仅允许访问具有特定扩展名的文件:

<FilesMatch "\.(html|txt)$">  Order Allow,Deny  Allow from all </FilesMatch>

此规则仅允许访问 .html 和 .txt 文件。

另请注意,该规则可能不适用于共享主机上的静态文件,因为它们由 Nginx Web 服务器提供服务,而该服务器不考虑 .htaccess 中指定的规则。

常见错误

.htaccess 中错误指定的规则可能会导致各种错误:

  • 403 Forbidden:在 .htaccess 中设置规则拒绝访问目录或文件时出现。

  • 404 Not Found:未找到请求的地址时发生错误。 如果 .htaccess 设置为重定向到不存在的页面或目录,或者 mod_rewrite 规则配置不正确,则可能会发生这种情况。

  • 500 内部服务器错误:如果 .htaccess 文件中存在语法错误、文件或目录的路径不正确、规则不正确或者使用未安装的 Apache 模块,则可能会出现此错误。

  • 无限循环重定向:当 .htaccess 文件中的重定向规则导致页面之间无限循环时出现。

这篇文章有帮助吗?

很好!

感谢您的反馈。

抱歉我们没能带来帮助

感谢您的反馈。

告诉我们可以如何改善此文档!

选择至少一个原因
需要进行 CAPTCHA 验证

反馈已发送

感谢,我们将试着改善此文档。