.htaccess 文件是 Apache 配置的延伸,允许用户在 web 目录下新建 .htaccess 文件,从而实现自定义的配置,比如页面重定向、防盗链、限制用户访问、防止目录浏览等功能。
目前一般的主机,都支持 .htaccess ,如果是自己搭的VPS,要去 Apache 的配置文件 httpd.conf 中,把 AllowOverride
设置为 All
,也可以通过设置 AccessFileName
这个参数来修改配置文件的名字。
.htaccess 文件的作用范围是本目录及所有子目录,Apache 又允许在任何目录存在 .htaccess 文件,当前目录下的 .htaccess 文件中的设置会覆盖其上级目录中的 .htaccess 文件中的配置,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
下面就给大家介绍几个常见的用法,其中URL重定向是最复杂的,需要懂正则表达式,这里介绍最常见的用法:HTTP 到 HTTPS的跳转和图片防盗链。重定向需要打开 httpd.conf 配置中的 mod_rewrite
,即去掉 LoadModule rewrite_module modules/mod_rewrite.so
前的注释符#。
HTTP 跳转到 HTTPS
如果访问的端口不是443端口,就跳转到 HTTPS 。
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
图片防盗链
如果 referer 不为空,并且 referer 不为 wker.com ,那么图片重定向到 noimg.png
上,可以自定义需要重定向到图片的后缀。
RewriteEngine on RewiteBase / RewriteCond %{HTTP_REFERER} !^$ [NC] RewriteCond %{HTTP_REFERER} !wker.com [NC] RewriteRule \.(jpg|gif|png|bmp|jpeg)$ /noimg.png [R,NC,L]
防止目录浏览
如果要运行该目录被浏览,可以改成 Options +Indexes
。
Options -Indexes
URL重定向
这个 Redirect 适合少数几个页面的重定向。
Redirect /rss.xml https://wker.com/feed/
阻止特定用户的访问
可以阻止单独IP,也可以阻止一个段的IP。
<Files *> order allow,deny allow from all deny from 10.10.10.0/24 deny from 10.10.20.20 </Files>
设置错误页面
其实也是一个跳转到作用,如果出现404,就跳转到 index.html 页。
ErrorDocument 401 /index.html ErrorDocument 403 /index.html ErrorDocument 404 /index.html
设置默认页面
特殊的目录下可能需要特别的默认页面。
DirectoryIndex index2.html
文件Gzip压缩
SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-httpd-php application/x-javascript
设置文件缓存时间
默认的缓存为0秒,特定的文件缓存为2592000秒(一个月)。
ExpiresActive On ExpiresDefault A0 ExpiresByType image/ico A2592000 ExpiresByType image/png A2592000 ExpiresByType image/jpg A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/gif A2592000 ExpiresByType text/css A2592000 ExpiresByType text/javascript A2592000 ExpiresByType application/javascript A2592000
.htaccess 配置的执行效率比直接写在 Apache 的 httpd.conf 文件中要低,毕竟要遍历每个目录,查找该目录下是不是有 .htaccess 文件,所以尽量把配置写到 http.conf 文件里,我发现 Plesk 下的 Apache 和 Nginx 设置会转换成 conf 文件,以提高执行效率。