入门指南 .htaccess:完整的备忘单、示例和最佳实践

入门指南 .htaccess:完整的备忘单、示例和最佳实践

.htaccess 是一个简单的文本文件,用于控制 Web 服务器处理请求的方式。它最初设计用于管理目录访问权限,但现在它有许多其他用途。

本指南并未深入探讨 .htaccess 而是一个实用的介绍,其中包含一些有用的代码片段。虽然 .htaccess 虽然它功能强大,但这并不意味着你应该把它用在所有事情上。了解何时以及如何应用它可以提升你网站的安全性、性能和功能。

什么是 .htaccess?

这个 .htaccess 文件是“超文本访问”的缩写,是主要用于 Apache 服务器。它允许用户控制访问权限、密码保护目录、设置重定向、自定义错误页面以及阻止特定的 IP 地址。

与 .htpasswd 文件配合使用,可以实现对多个用户的精细目录访问控制。许多托管服务提供商支持 .htaccess,但它并不通用——一些 Web 服务器(如 Nginx)使用不同的方法。

在哪里可以找到你的 .htaccess 文件?

默认情况下, .htaccess 文件在 cPanel 的文件管理器和其他主机控制面板中是隐藏的。您可以在文件管理器设置中启用“显示隐藏文件”选项来显示它。

如果您找不到该文件,请不要慌张——它可能还不存在。大多数情况下,它应该位于您网站的根目录中,通常名为 public_html 或 www。如果您在同一个托管账户下管理多个网站,则每个网站可能都有自己的 .htaccess 文件位于其各自的文件夹中。

大多数以句点 (.) 开头的系统文件都是隐藏的。如果您的 .htaccess 文件不可见,请检查您的托管设置或在文本编辑器中手动创建一个。

您的 .htaccess cPanel 文件管理器默认隐藏该文件。您可以通过配置文件管理器设置来显示它。

.htaccess 备忘单和代码示例

而 .htaccess 可以做很多事情,掌握正确的命令至关重要。为了方便起见,我们整理了一份速查表,列出了最常用的 .htaccess 规则。无论你是否需要阻止恶意机器人,强制 HTTPS自定义错误页面或改进 SEO,您会在下面找到可立即使用的代码片段。

只需复制、粘贴并进行调整即可满足您的需求。让我们开始吧!

备注:请在使用任何规则前仔细检查并核实。我们对可能出现的任何问题概不负责——使用风险自负。此外,大多数规则都要求 RewriteEngine On 在你的指令 .htaccess 文件才能正常运行。

重写和重定向规则

用一个服务所有请求 PHP 文件 .htaccess

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^?]*)$ /index.php [NC,L,QSA]

WordPress .htaccess 对于永久链接 .htaccess

(这是本节中唯一包含 RewriteEngine 规则的规则。)

# BEGIN WordPress

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

# END WordPress

强制使用 www .htaccess

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example\.com [NC]

RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]

以通用方式强制使用 www .htaccess

RewriteCond %{HTTP_HOST} !^$

RewriteCond %{HTTP_HOST} !^www\. [NC]

RewriteCond %{HTTPS}s ^on(s)|

RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

强制使用非 www .htaccess

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]

RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

以通用方式强制使用非 www .htaccess

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.

RewriteCond %{HTTPS}s ^on(s)|off

RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$

RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]

力 HTTPS - .htaccess

使用此重定向非 HTTPS 请求一个 HTTPS 请求。例如,如果您访问 https://example.com/,它将重定向到 https://example.com。

RewriteEngine on

RewriteCond %{HTTPS} !on

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

力 HTTPS 在代理后面 .htaccess

如果您的服务器前面有一个执行 TLS 终止的代理,则很有用。

RewriteCond %{HTTP:X-Forwarded-Proto} !https

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

强制使用尾部斜杠 .htaccess

使用关注 .htaccess 规则将任何不以斜杠结尾的请求重定向到相同的 URL(但末尾带有斜杠)。例如,从 https://example.com/your-page 重定向到 https://example.com/your-page/

RewriteCond %{REQUEST_URI} /+[^\.]+$

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

删除尾部斜杠 .htaccess

使用它来删除任何尾随斜杠(它将 301 重定向到非尾随斜杠 URL)

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)/$ /$1 [R=301,L]

重定向单个页面 .htaccess

将单个 URL 重定向到新位置

Redirect 301 /oldpage.html https://www.yoursite.com/newpage.html

Redirect 301 /oldpage2.html https://www.yoursite.com/folder/

使用以下方式为单个目录设置别名 .htaccess

RewriteEngine On

RewriteRule ^source-directory/(.*) target-directory/$1

脚本的别名路径 .htaccess

RewriteEngine On

RewriteRule ^$ index.fcgi/ [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]

这个例子有一个 index.fcgi 某个目录中的文件,并且该目录中任何无法解析文件名/目录的请求都将被发送到 index.fcgi 脚本。如果你想 baz.foo/some/cool/path 由...处理 baz.foo/index.fcgi (还支持以下请求 baz.foo)同时保持 baz.foo/css/style.css 等等。

使用以下方式重定向整个网站 .htaccess

使用以下内容 .htaccess 将整个站点重定向到新位置/域的规则

Redirect 301 / https://newsite.com/

这种方式可以保证链接完整。也就是说 www.oldsite.com/some/crazy/link.html 会变成 www.newsite.com/some/crazy/link.html。当您只是将网站“移动”到新域名时,这非常有用。

使用以下方式为“干净” URL 命名 .htaccess

此代码片段可让您使用“干净的 URL” - 那些没有 PHP 扩展,例如 example.com/users 而不是 example.com/users.php.

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d

RewriteRule ^([^.]+)$ $1.php [NC,L]

安全规则

拒绝所有访问 .htaccess

如果您想阻止 apache 提供任何文件,请使用以下命令。

这将阻止您访问您的网站。如果您想拒绝所有访问,但仍能自行查看,请阅读下一条规则:

Deny from all

拒绝除您之外的所有访问(仅允许某些 IP) .htaccess

使用此功能仅允许某些 IP 地址访问您的网站。

# Require all denied

# Require ip xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxx 是您的 IP 地址。例如,如果您将最后三位数字替换为 0/12,这将指定同一网络内的 IP 地址范围,从而省去了单独列出所有允许 IP 地址的麻烦。

请参阅下一条规则以了解此规则的“反面”!

使用以下方式阻止 IP 地址 .htaccess

这将允许除列出的 IP 地址之外的所有 IP 进行访问。您可以使用此功能允许除垃圾邮件发送者 IP 地址之外的所有 IP 进行访问。

将 xxx.xxx.xxx.xxx 和 xxx.xxx.xxx.xxy 替换为您要阻止的 IP 地址。

Apache 2.4

# Require all granted

# Require not ip xxx.xxx.xxx.xxx

# Require not ip xxx.xxx.xxx.xxy

仅允许从 LAN 进行访问 .htaccess

order deny,allow

deny from all

allow from 192.168.0.0/24

拒绝访问某些用户代理(机器人) .htaccess

使用此 .htaccess 阻止/禁止某些用户代理的规则

RewriteCond %{HTTP_USER_AGENT} ^User\ Agent\ 1 [OR]

RewriteCond %{HTTP_USER_AGENT} ^Another\ Bot\ You\ Want\ To\ Block [OR]

RewriteCond %{HTTP_USER_AGENT} ^Another\ UA

RewriteRule ^.* - [F,L]

拒绝访问隐藏文件和目录 .htaccess

隐藏文件和目录(名称以点开头的文件和目录) .) 在大多数情况下(即使不是全部时间)都应该得到保护。例如: .htaccess、.htpasswd、.git、.hg。

RewriteCond %{SCRIPT_FILENAME} -d [OR]

RewriteCond %{SCRIPT_FILENAME} -f

RewriteRule "(^|/)\." - [F]

或者,你也可以提出 Not Found 错误,攻击者毫无头绪:

RedirectMatch 404 /\..*$

拒绝访问某些文件 .htaccess

使用它来阻止或拒绝访问某些文件

order allow,deny

deny from all

拒绝访问备份和源文件 .htaccess

这些文件可能是由一些文本/html 编辑器(如 Vi/Vim)留下的,当任何人都可以访问它们时,会带来巨大的安全隐患。

## Apache 2.2

Order allow,deny

Deny from all

Satisfy All

## Apache 2.4

# Require all denied

禁用目录浏览 .htaccess

Options All -Indexes

启用目录列表 .htaccess

Options All +Indexes

禁用某些文件类型的列表 .htaccess

使用此选项可以排除某些文件类型 Apache 目录列表。您可以使用此功能来阻止显示 .pdf 文件或视频文件。

IndexIgnore *.zip *.mp4 *.pdf

禁用图像热链接 .htaccess

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]

RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

重定向热链接器并显示不同的图像 .htaccess

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^https://(www\.)?your-website.com/.*$ [NC]

RewriteRule \.(gif|jpg|png)$ https://www.your-website.com/do-not-hotlink-our-content.jpg [R,L]

拒绝来自某些推荐人的访问 .htaccess

使用此规则可以阻止对包含来自特定域的引荐来源的请求的访问。

RewriteCond %{HTTP_REFERER} block-this-referer\.com [NC,OR]

RewriteCond %{HTTP_REFERER} and-block-traffic-that-this-site-sends\.com [NC]

RewriteRule .* - [F]

使用密码保护目录 .htaccess

首先,你需要在系统中的某个位置创建一个 .htpasswd 文件。在命令行中运行以下命令:

htpasswd -c /home/hidden/directory/here/.htpasswd the_username

然后您就可以使用它进行身份验证。在您的 .htaccess 您需要类似以下代码的文件,但请确保 AuthUserFile 是您刚刚创建的 .htpasswd 文件的文件路径。您应该将 .htpasswd 文件保存在无法通过 Web 访问的目录中。因此,请勿将其放在 /public_html/ 或 /www/ 目录中。

AuthType Basic

AuthName "Password Protected Dir Title"

AuthUserFile /home/hidden/directory/here/.htpasswd

Require valid-user

使用密码保护一个或多个文件 .htaccess

AuthName "Password Protected Directory Title"

AuthType Basic

AuthUserFile /home/hidden/directory/here/.htpasswd

Require valid-user

Require valid-user

绩效规则

使用以下方法压缩文本文件 .htaccess

# Force compression for mangled headers.

# https://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping

SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding

RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding

# Compress all output labeled with one of the following MIME-types

# (for Apache versions below 2.3.7, you don't need to enable `mod_filter`

# and can remove the `` and `` lines

# as `AddOutputFilterByType` is still in the core directives).

AddOutputFilterByType DEFLATE application/atom+xml \

application/javascript \

application/json \

application/rss+xml \

application/vnd.ms-fontobject \

application/x-font-ttf \

application/x-web-app-manifest+json \

application/xhtml+xml \

application/xml \

font/opentype \

image/svg+xml \

image/x-icon \

text/css \

text/html \

text/plain \

text/x-component \

text/xml

设置过期标头 .htaccess

过期标头 告诉浏览器是否应该从服务器请求特定文件,还是直接从缓存中获取。建议将静态内容的过期时间标头设置为将来某个时间。

如果您不使用基于文件名的缓存破坏来控制版本控制,请考虑将 CSS 和 JS 等资源的缓存时间降低到 1 周左右。

ExpiresActive on

ExpiresDefault "access plus 1 month"

# CSS

ExpiresByType text/css "access plus 1 year"

# Data interchange

ExpiresByType application/json "access plus 0 seconds"

ExpiresByType application/xml "access plus 0 seconds"

ExpiresByType text/xml "access plus 0 seconds"

# Favicon (cannot be renamed!)

ExpiresByType image/x-icon "access plus 1 week"

# HTML components (HTCs)

ExpiresByType text/x-component "access plus 1 month"

# HTML

ExpiresByType text/html "access plus 0 seconds"

# JavaScript

ExpiresByType application/javascript "access plus 1 year"

# Manifest files

ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"

ExpiresByType text/cache-manifest "access plus 0 seconds"

# Media

ExpiresByType audio/ogg "access plus 1 month"

ExpiresByType image/gif "access plus 1 month"

ExpiresByType image/jpeg "access plus 1 month"

ExpiresByType image/png "access plus 1 month"

ExpiresByType video/mp4 "access plus 1 month"

ExpiresByType video/ogg "access plus 1 month"

ExpiresByType video/webm "access plus 1 month"

# Web feeds

ExpiresByType application/atom+xml "access plus 1 hour"

ExpiresByType application/rss+xml "access plus 1 hour"

# Web fonts

ExpiresByType application/font-woff2 "access plus 1 month"

ExpiresByType application/font-woff "access plus 1 month"

ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

ExpiresByType application/x-font-ttf "access plus 1 month"

ExpiresByType font/opentype "access plus 1 month"

ExpiresByType image/svg+xml "access plus 1 month"

使用以下方式关闭电子标签 .htaccess

通过删除 ETag 标头,您可以禁用缓存和浏览器验证文件的能力,因此它们被迫依赖您的 Cache-Control 和 Expires 标头。

Header unset ETag

FileETag None

限制上传文件大小 .htaccess

将文件大小以字节为单位。下面的代码将其限制为 1mb。

LimitRequestBody 1048576

其他规则

mod_rewrite 的服务器变量 .htaccess

%{API_VERSION}

%{DOCUMENT_ROOT}

%{HTTP_ACCEPT}

%{HTTP_COOKIE}

%{HTTP_FORWARDED}

%{HTTP_HOST}

%{HTTP_PROXY_CONNECTION}

%{HTTP_REFERER}

%{HTTP_USER_AGENT}

%{HTTPS}

%{IS_SUBREQ}

%{REQUEST_FILENAME}

%{REQUEST_URI}

%{SERVER_ADDR}

%{SERVER_ADMIN}

%{SERVER_NAME}

%{SERVER_PORT}

%{SERVER_PROTOCOL}

%{SERVER_SOFTWARE}

%{THE_REQUEST}

选择 PHP 变量 .htaccess

php_value

例如:

php_value upload_max_filesize 50M

php_value max_execution_time 240

自定义错误页面 .htaccess

ErrorDocument 500 "Houston, we have a problem."

ErrorDocument 401 https://error.yourdomain.com/mordor.html

ErrorDocument 404 /errors/halflife3.html

更新时将用户重定向到维护页面 .htaccess

这会将用户重定向到维护页面,但允许访问您的 IP 地址。请将 555.555.555.555 更改为您的 IP 地址,并将 YourMaintenancePageFilenameOrFullUrlUrl.html 更改为您的错误页面(或使用其他域名的完整 URL)。

ErrorDocument 403 YourMaintenancePageFilenameOrFullUrlUrl.html

Order deny,allow

Deny from all

Allow from 555.555.555.555

强制下载 .htaccess

有时你想强制浏览器下载某些内容而不是直接显示它们。以下代码片段可以帮助你实现这一点。

ForceType application/octet-stream

Header set Content-Disposition attachment

禁用显示服务器信息(服务器签名) .htaccess

虽然许多人认为这毫无意义(特别是在安全方面),但如果您想阻止服务器泄露服务器信息(服务器操作系统等),请使用以下命令:

ServerSignature Off

防止下载 .htaccess

有时你想强制浏览器显示某些内容而不是下载它们。以下代码片段可以帮助你实现这一点。

Header set Content-Type text/plain

允许跨域字体 .htaccess

CDN由于 CROS 问题,-served webfonts 可能无法在 Firefox 或 IE 中使用。以下来自 alrra 的代码片段应该可以解决这个问题。

Header set Access-Control-Allow-Origin "*"

自动 UTF-8 编码 .htaccess

有 Apache 自动以 UTF-8 编码您的内容,请使用以下代码。如有需要,您还可以将 UTF-8 替换为其他字符集:

# Use UTF-8 encoding for anything served text/plain or text/html

AddDefaultCharset utf-8

# Force UTF-8 for a number of file formats

AddCharset utf-8 .atom .css .js .json .rss .vtt .xml

使用以下方式设置服务器时区(UTC 或其他时区) .htaccess

SetEnv TZ UTC

查看时区列表。要将其设置为洛杉矶时区:

SetEnv TZ America/Los_Angeles

切换到另一个 PHP 版本有 .htaccess

如果你在共享主机上,那么可能会有多个版本的 PHP 已安装,有时您需要为您的网站指定特定版本。例如,需要 PHP >= 5.4. 以下代码片段应该切换 PHP 版本给你。

AddHandler application/x-httpd-php55 .php

或者,您可以使用 AddType

AddType application/x-httpd-php55 .php

禁用 Internet Explorer 兼容性视图

IE 中的兼容性视图可能会影响某些网站的显示方式。以下代码片段应强制 IE 使用 Edge Rendering Engine 并禁用兼容性视图。

BrowserMatch MSIE is-msie

Header set X-UA-Compatible IE=edge env=is-msie

执行 PHP 使用不同的文件扩展名 .htaccess

以下代码将使用 php 运行以 .ext 结尾的文件:

AddType application/x-httpd-php .ext

如果存在,则自动提供 WebP 图像

如果支持 WebP 图像,并且在与要提供的 jpg/png 图像相同的位置找到具有 .webp 扩展名且名称相同的图像,则提供 WebP 图像。

RewriteEngine On

RewriteCond %{HTTP_ACCEPT} image/webp

RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]

刚买了主机?接下来该怎么做?

设置主机可能会让人困惑。因此,我们创建了 HostScore 设置帮助,这是一项为您完成的服务,可帮助您以正确的方式配置您的主机。

我们帮助 SSL 安装、DNS 和名称服务器设置, WordPress 安装或迁移,以及安全调优。一次性付费。100%退款保证。

探索我们的服务

总结

这个 .htaccess 文件是一个强大的工具,但重要的是要明智地使用它。虽然添加额外的规则来快速修复可能很诱人,但请记住 .htaccess 不是主配置文件。

每次服务器遇到 .htaccess 文件,它必须读取并执行该文件,从而覆盖主配置设置。此过程会消耗资源,并可能降低网站速度,尤其是在过度使用的情况下。尽可能直接在服务器级别应用配置(例如,在 Apache的主配置文件)以获得更好的性能。

通过使用 .htaccess 高效地搭配 优化的托管计划 – 您可以增强网站的安全性、性能和可扩展性

常见问题解答

我应该使用 .htaccess?

从全球使用意义上来说 .htaccess 文件可以提供很多便利。然而,这可能会增加服务器资源的成本。尽可能依赖主服务器配置,而不是 .htaccess 文件中。

我怎么知道我的 .htaccess 在工作吗?

确保你的 .htaccess 文件是否正常工作的方法是访问放置它的目录的 URL。如果它不工作,您可能会遇到 500 内部服务器错误。

我可以有多个 .htaccess 文件?

.htaccess 从技术上讲,文件可以放置在您想要配置的每个目录中。如果您运行多个网站,则每个主目录都可以有自己的文件,并且其下的每个子目录中都可以有一个文件。

htaccess 中的重写规则是什么?

重写 Apache 允许您重写 URL 请求的模块。它只是接收传入的请求,并将其定向到您指定的替代请求。

相关推荐

政府禁止采购、安装Win8原因:文件会同步至美国
365bet在线体育投注网

政府禁止采购、安装Win8原因:文件会同步至美国

📅 07-11 👁️ 8474
断裂血玉石图纸哪里掉落 断裂血玉石图纸获取方法
365bet网址搜索器

断裂血玉石图纸哪里掉落 断裂血玉石图纸获取方法

📅 07-31 👁️ 530
第三只眼安装教程
365bet网址搜索器

第三只眼安装教程

📅 08-03 👁️ 8801
海豚生活在哪些海域,是浅海还是深海
365体育app

海豚生活在哪些海域,是浅海还是深海

📅 07-05 👁️ 8958
冠军盛典下载
365bet在线体育投注网

冠军盛典下载

📅 07-29 👁️ 6322
海陆最新电视剧
365bet网址搜索器

海陆最新电视剧

📅 07-02 👁️ 1220