让Nginx支持.htaccess
linux
1646
0
.htaccess配置文件设置是Apache上的好东西,现在我们让Nginx服务器也能使用它,可能很多朋友都以为nginx不支持.htaccess,只有apache才支持.htaccess文件,其实这是错误的看法nginx也是支持.hatccess的,下面来总结一下配置方法。
其实nginx和.htaccess一点关系都没有,只是一大堆人深受apache的影响觉得nginx应该也要支持.htaccess功能。在nginx的配置中直接include .htaccess文件就好:
`include /站点目录/.htaccess;`
nginx与apache是两个不同webserver程序,apache需要把含伪静态规则的.htaccess上传到站点根目录下使用,但nginx可以include任何文件,而不仅仅是.htaccess。
其实nginx这样引用.htaccess跟apache还是有区别的:
1.nginx是启动引入,因为nginx特别注重效率,所以启动的时候会把所有的配置文件读入内存,然后启动。如果发现有语法错误,则启动失败。而apache则是动态引入,每次访问站点都会重新载入配置。
2.nginx中的include是手动添加,指定目录。apache已经把.htaccess作为它的一种特色机制,并且支持站所有子目录都可以有.htaccess文件。
根际实际开发经验,很多人在早期都是用虚拟空间的多,而早期的虚拟空间基本都是apache做webserver,所以用户不需要联系空间商就能自己做伪静态,而开源程序更是方便的拓展这一功能(ecshop,wordpress,phpcms等等)。并且维护也方便,只要覆盖.htaccess就好。
其实,没有几个站点经常去修改.htaccess,并且现在基本使用vps居多。
nginx 也可使用 .htaccess 文件实现多种功能,在 nginx/nginx.conf的server{}中引入 .htaccess 文件:
`include /vhosts/quany.info/.htaccess;`
nginx完全可以支持.htaccess文件:
1.新建一个.htaccess文件,在里面输入规则:
```
# nginx rewrite rule
rewrite ^(.*?)/article/.*?-(d+)-(d+).html$ $1/show.html?id=$2&page=$3 break;
rewrite ^(.*?)/category/.*?-(d+)-(d+).html$ $1/list.html?id=$2&page=$3 break;
rewrite ^(.*?)/tag/([^/]+)/?$ $1/tag.html?w=$2 break;
rewrite ^(.*?)/tag/([^/]+)/(d+)$ $1/tag.html?w=$2&page=$3 break;
# end nginx rewrite rule
```
保存文件并上传到网站的根目录。
2.修改虚拟主机配置
`#vim /usr/local/nginx/config/nginx.conf `
在你需要添加伪静态的虚拟机中的server块中引入.htaccess文件
`include /usr/www/.htaccess`
保存、退出重启nginx
`#/etc/init.d/nginx restart`
重启之前可以查看语法是否正确:
`#/usr/local/nginx/sbin/nginx -t`
nginx的rewrite规则可以直接放在主机配置中也可以放在独立的文件用include file,存为独立的文件时,保存到一个新的文件(文件名可以任意取,不过建议还是用.ht(注意有个“点”)开头的文件名,因为这个服务器里面默认过滤了外部对.ht开头的文件访问:
```
location ~ /.ht {
deny all;
}
```
赞 1
您可以选择一种方式赞助本站
支付宝扫一扫
微信扫一扫
赏
分享
您可以选择一种方式赞助本站
支付宝扫一扫
微信扫一扫