用.htaccess文件重定向URL,重写URL和实现缓存等内容介绍
使用.htaccess文件,首先需要apache服务器打开mod_rewrite模块。
本文章主要介绍使用.htaccess阻止某些IP访问站点,URL重定向,URL重写,限定访问特定资源,实现缓存等功能。
一,安装mod_rewrite模块
Apache服务器默认没有打开mod_rewrite模块,所以必须手动来启动。
打开Apache配置文件httpd.conf文件,找到:
#LoadModule rewrite_module modules/mod_rewrite.so
去掉#,重启Apache服务器即可。
二,新建.htaccess文件
htaccess文件是Apache服务器的一个配置文件,它负责相关目录下的网页配置。
通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、
允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
Windows下可以用记事本或其他编辑器新建,新建号的.htaccess文件务必放在站点根目录下。
三,配置.htaccess文件
配置.htaccess文件的格式如下:
<ifmodule mod_rewrite.c>
RewriteEngine On
#这里是你的规则
</ifmodule>
RewriteEngine On:启动URL重写引擎
一个简单的URL重定向
Redirect 301 ^old.html$ http://www.***.com/newpage.html
这是设置一个http状态码为301(永久移动)并把所有访问old.html转向到newpage.html。
使用了正则表达式来匹配访问的页面,后面的url必须是完整路径。
URL重写
RewriteEngine on
RewriteRule ^old.html$ new.html
第一行打开重写引擎
第二行是重写规则。这样用户访问old.html时实际是new.html,且地址栏里依旧显示是old.html。
为了在地址栏显示新的访问地址,我们可以加个r标志在RewriteRule语句里。
RewriteRule ^old.html$ http://hostname/new.html [r=301]
搜索引擎友好的URL例一
RewriteRule ^goods/([^/]+)/([^/]+)/([^/]+) goods.php?cat=$1&brand=$2&prod=$3
这条规则允许访问者以类似这样的URL:goods/app/hot/11访问goods.php?cat=app&brand=hot&prod=11.
括号里为一个单元,分别对应后面的$1,$2,$3。[^/]+ 在原括号里表示除了/之外的任何一个或是多个字符。
也可写成这样:RewriteRule ^goods/([a-z]+)/([a-z]+)/([0-9]+)$ goods.php?cat=$1&brand=$2&prod=$3
搜索引擎友好的URL例二
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.html$ index.php [L]
RewriteRule ^blog/(.+)/$ blog.php?id=$1 [L]
</ifmodule>
当在浏览器中输入index.html时,后台调用的是index.php文件。
符号“^”和“$”正则表达式的开始和结束,符号L表示停止处理接下来的规则。
最后一条当我们在浏览器中输入 blog/2时,后台调用blog.php文件并传递参数id=2。
记得每行后面加个 L 符号。
如果站点升级,又要保证旧链接可用,例子如下:
RewriteRule ^oldpage.html$ newpage.html [R=301]
自定义错误页面
ErrorDocument 404″/404.html”
这是定义404页面无法找到的错误,也可以定义其他错误代码的页面。
限定访问特定资源
<Files”protected.html”>
AuthName”Username and password required”
AuthUserFile/path/to/.htpasswd
Require valid-user
AuthType Basic
</Files>
保护protected.html,authName是登陆框的提示信息,authuserfile是.htpasswd文件的路径
阻止某些ip访问
order allow,deny
deny from 192.168.0.1
allow from allOrder
告诉apache指令的顺序。这里的这个是先允许后拒绝的。
虽然allow from all后出现但是还是在前面生效。拒绝了192.168.0.1的访问。
也可以按段来屏蔽访问的,只要只指定前面的几段就可以类似,192.168.
实现缓存
ExpiresActive on
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
ExpiresByType image/jpg “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
第一行开启,下面分别控制各种资源都加上一个月的缓存期。
这个功能依赖apache的mod_expires 模块。