.htaccess 是 Apache 服务器上的一个配置文件,允许用户在不修改主服务器配置的情况下,对目录级别的访问权限、URL 重写、缓存控制等进行精细控制。在这里,我们分享几个 .htaccess 的 常见使用案例及方法,涵盖 SEO 优化、安全防护、性能优化等方面。
将动态 URL 转换为静态 URL
RewriteEngine On
RewriteRule ^product/([0-9]+)/?$ product.php?id=$1 [L]
作用:
将 example.com/product.php?id=123 转换为 example.com/product/123/,提升 SEO 和用户体验。
参数说明:
1、^product/([0-9]+)/?$ 匹配 /product/数字/ 格式的 URL。
3、product.php?id=$1 将匹配的数字作为 id 参数传递给 product.php。
3、[L] 表示这是最后一条规则(Last)。
强制 HTTPS(SSL 重定向)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
禁止特定IP访问
Order Allow,Deny
Allow from all
Deny from 192.168.1.100
Deny from 203.0.113.45
禁止爬虫访问敏感文件
<Files "config.php">
Order Allow,Deny
Deny from all
</Files>
设置浏览器缓存
<FilesMatch "\.(jpg|jpeg|png|gif|css|js)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
防止目录列表
Options -Indexes
如果目录没有 index.html 或 index.php,禁止显示文件列表。
进制恶意扫描
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]
限制文件上传类型
<FilesMatch "\.(php|php5|phtml|pl|py|jsp|asp|sh|cgi)$">
Order Allow,Deny
Deny from all
</FilesMatch>
自定义错误页面
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
以上几个是我们.htaccess配置文件中常见的用法。