我们都知道.htaccess文件是一个功能强大的配置文件,它是用于基于 Apache 的 Web 服务器上管理和修改目录级别的设置。通过修改.htaccess文件,您可以控制网站行为的许多方面,而无需更改服务器范围的设置。
以下是 36 个重要.htaccess技巧和提示,可以帮助提高您网站的安全性、性能和 SEO。
1. 将 HTTP 重定向到 HTTPS
如果您的网站支持HTTPS,则务必将所有流量从HTTP重定向到HTTPS,以提高安全性并提升搜索引擎排名。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
2. 设置自定义 404 错误页面
首先,您需要在网站的文档根目录下创建将用作自定义404错误页面的 HTML 文件,然后添加此行以指定您的自定义 404 页面。此页面有助于留住访问不存在页面的用户。
ErrorDocument 404 /404.html
3.强制文件下载
要强制下载文件而不是将其显示在浏览器中,请使用以下指令:
<FilesMatch "\.(pdf|zip|doc)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
这将使 PDF 或 ZIP 等文件在访问时自动下载。
4. 屏蔽特定 IP 地址
要阻止来自特定 IP 地址的用户,请添加以下行:
<Limit GET POST>
order allow,deny
deny from 123.456.789.000
allow from all
</Limit>
5. 将旧 URL 重定向到新 URL
如果您更改了网站结构,将旧 URL 重定向到新 URL 对于维护 SEO 至关重要。
Redirect 301 /old-url.html https://yourdomain.com/new-url.html
这将从旧 URL 发送永久重定向 (301) 到新 URL。
6. 密码保护目录
您可以通过将以下内容添加到文件中来使用密码保护目录.htaccess:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
创建一个.htpasswd用于存储用户名和密码的文件。
htpasswd -c .htpasswd username
7. 禁用目录浏览
默认情况下,用户可能能够看到没有索引页的目录中的文件列表,但您可以通过禁用目录浏览来阻止这种情况。
Options -Indexes
这将显示 403 禁止错误而不是文件列表。
8.限制对.htaccess文件的访问
为了保护您的.htaccess文件免遭未经授权的访问,请添加此规则:
<Files .htaccess>
order allow,deny
deny from all
</Files>
这可确保没有人可以查看您的文件内容.htaccess。
9. 阻止热链接
热链接是指另一个网站直接链接到您的图片,从而占用您的带宽。为防止这种情况,请使用:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [F]
替换yourdomain.com为您的域名。
10. 自定义 403 禁止页面
与自定义 404 页面一样,您可以创建自定义 403 禁止页面。
ErrorDocument 403 /403.html
当用户尝试访问受限内容时会出现此页面。
11. 使用警告图片防止图片热链接
您可以用自定义警告图像替换热链接图像:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ https://yourdomain.com/warning.jpg [R,L]
用您的自定义警告图像替换warning.jpg。
12. 设置缓存控制标头
为了提高网站性能,请使用.htaccess设置图像和脚本等静态资源的缓存控制:
<FilesMatch "\.(jpg|jpeg|png|gif|js|css)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
这会告诉浏览器缓存这些文件 30 天(2592000秒)。
13.拒绝访问某些文件类型
您可能想要阻止对某些文件类型的访问,例如配置文件:
<FilesMatch "\.(ini|log|conf)$">
Order allow,deny
Deny from all
</FilesMatch>
14.启用Gzip压缩
Gzip 压缩减少了发送到浏览器的文件大小,从而缩短了加载时间:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/javascript
</IfModule>
15. 重定向到维护页面
如果您的网站正在维护,您可以将所有访问者重定向到特定的维护页面:
RewriteEngine On
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteRule ^(.*)$ /maintenance.html [R=307,L]
替换maintenance.html为您的维护页面 URL。
16.限制文件上传大小
要限制网站上的文件上传大小,请使用以下规则:
php_value upload_max_filesize 10M
php_value post_max_size 10M
17. 将非 WWW 重定向到 WWW
为了确保所有流量都定向到您的域名的 www 版本:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这会将访问者从 重定向yourdomain.com到www.yourdomain.com。
18. 将 WWW 重定向到非 WWW
如果您更喜欢非 www 版本的域名,请使用以下代码:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://yourdomain.com/\ [L,R=301]
这将重定向www.yourdomain.com到yourdomain.com。
19. 阻止访问特定文件夹中的 PHP 文件
出于安全考虑,您可以阻止访问特定目录中的 PHP 文件(例如上传):
<Directory "/path/to/uploads">
<Files "*.php">
Order Deny,Allow
Deny from all
</Files>
</Directory>
替换/path/to/uploads为实际文件夹路径。
20. 阻止图像目录访问
要阻止访问您的图像文件夹但仍允许图像加载到您的网站:
<Directory "/path/to/images">
Order Deny,Allow
Deny from all
</Directory>
21. 阻止特定用户代理
如果某些机器人或抓取工具正在滥用您的网站,您可以阻止它们:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} badbot [NC]
RewriteRule .* - [F,L]
替换badbot为您要阻止的用户代理。
22.按国家/地区限制访问
要阻止来自特定国家/地区的访问者,您需要访问这些国家/地区的 IP 范围列表。
以下是阻止特定 IP 范围的示例:
<Limit GET POST>
order allow,deny
deny from 123.456.789.
allow from all
</Limit>
您需要将 IP 范围替换为您想要阻止的国家/地区特定的 IP 范围。
23. 启用跨域资源共享 (CORS)
要允许字体或图像等资源使用 CORS,请使用:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
24. 防止 SQL 注入
您可以阻止常见的 SQL 注入尝试:
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C)(script|SELECT|INSERT|UPDATE|DELETE|DROP|UNION|;|\-\-) [NC]
RewriteRule .* - [F]
25. 仅允许上传某些文件类型
您可以限制可以上传到您的网站的文件类型。
<FilesMatch "\.(php|cgi|pl|py)$">
Order Deny,Allow
Deny from all
</FilesMatch>
26. 启用文件访问日志
如果您想要跟踪对特定文件的访问以用于审计或监控目的,则可以为某些文件类型启用日志记录:
SetEnvIf Request_URI "\.(pdf|doc|mp3)$" requested_file
CustomLog /path/to/logfile.log combined env=requested_file
这将在单独的日志文件中记录对.pdf、.doc和.mp3文件的访问。
27. 自定义 500 内部服务器错误页面
如果您的服务器遇到内部错误,您可以显示自定义错误页面以提供更好的用户体验。
ErrorDocument 500 /500.html
这样,用户将不会看到默认的服务器错误消息,而是看到您自定义的更加用户友好的消息。
28. 防止访问备份和源文件
备份文件(如.bak).old或源文件(如.log)有时会留在服务器上,从而暴露敏感信息。
为了防止访问这些文件,请添加以下内容:
<FilesMatch "\.(bak|old|log|sql)$">
Order allow,deny
Deny from all
</FilesMatch>
29. 限制引荐来源的访问
您可以控制哪些网站可以向您的网站引荐流量。例如,当引荐来源来自特定域时阻止访问您的网站。
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https://www\.baddomain\.com [NC]
RewriteRule .* - [F]
将其替换baddomain.com为您要阻止作为引荐来源的网站。
30. 通过 IP 地址限制对管理区域的访问
如果您的网站有管理面板(如/admin或/wp-admin),出于安全原因,最好根据 IP 地址限制对此部分的访问:
<Files "admin.php">
Order Deny,Allow
Deny from all
Allow from 123.456.789.000
</Files>
替换123.456.789.000为您的 IP 地址。只有此 IP 才允许访问admin.php。
31. 自定义 401 未授权错误页面
当用户尝试在没有适当身份验证的情况下访问受限页面时,您可以显示自定义的 401 未授权错误页面,而不是默认服务器消息:
ErrorDocument 401 /401.html
32. 根据语言偏好进行重定向
如果您有一个多语言网站,您可以根据浏览器的语言设置将用户重定向到您网站的适当语言版本:
RewriteEngine On
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ /fr/index.html [L,R=302]
此示例将用户重定向至法语 ( fr) 语言偏好设置下的法语版网站。
33. 设置默认字符集
您可以为您的网站指定默认字符编码,以确保在不同的浏览器上实现一致的文本呈现:
AddDefaultCharset UTF-8
这对于处理多种语言或特殊字符的网站特别有用。
34. 限制请求方法
您可以限制您的网站允许哪些 HTTP 请求方法(例如GET, )以增强安全性。POST
例如,您可能想要阻止以下危险TRACE方法TRACK:
<LimitExcept GET POST>
Order Deny,Allow
Deny from all
</LimitExcept>
35. 网站维护期间限制访问
如果您想将网站置于维护模式,但允许某些 IP(例如您自己的 IP)访问该网站,请使用以下命令:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteRule ^(.*)$ /maintenance.html [R=302,L]
替换123.456.789.000为您的 IP 地址。只有来自该 IP 的访问者才能访问该网站,而其他人将看到维护页面。
36. 设置缓存控制标头
通过在用户浏览器中存储文件副本,缓存有助于提高网站的性能。您可以设置缓存控制标头,以告知浏览器缓存某些类型的文件多长时间:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
与CSS或JavaScript相比,此示例为图像设置了更长的缓存时间。
这些.htaccess提示和技巧可以显著提高您网站的安全性、性能和用户体验。在进行更改之前,请务必备份您的.htaccess文件,并测试配置以确保您的网站按预期运行。