欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

nginx下的.htaccess 有大用 有大大用

实现url的重写,可以在nginx.conf中rewrite 或者include 引入.htaccess文件实现。这2中都修改后都需要重启nginx。其中.htaccess在apache和nignx下是不一样的,其中在apache下可以在项目的任何位置,他会自动读入,而nginx需要在配置文件中include 引入文件,并且启动的时候读入。

niginx下rewrite规则:rewrite规则

例子:我在本地nginx下使用restful接口时,使用中,将url重写


来自 https://blog.csdn.net/qq_21034239/article/details/54573113



谁说nginx不支持.htaccess文件?

在网上查到的资料很多人都说nginx目前不支持.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、修改虚拟主机配置

# ee /usr/local/etc/nginx/nginx.conf  #freebsd 7.2默认nginx默认安装的配置文件

在你需要添加伪静态的虚拟机中的server块中引入.htaccess文件

include /usr/www/.htaccess  #请把这个改成你.htaccess文件的位置,

保存、退出重启nginx

# /usr/local/etc/rc.d/nginx restart

刷新看看,如果能正常器从证明你的rewrite rule的语法是正确

nginx的rewrite规则您可以直接放在主机配置中也可以放在独立的文件用includeinru,存为独立的文件时,保存到一个新的文件(文件名可以任意取,不过建议还是用.ht(注意有个“点”)开头的文件名,因为这个服务器里面默认过滤了外部对.ht开头的文件访问:

location ~ /\.ht { 
    deny  all; 
}


来自 https://blog.csdn.net/qq_16490557/article/details/36173833



关于Nginx支持.htaccess的分析

http://www.40099.cc/funny/184.html

 之前曾在Typecho开发群中与王轶讨论了关于Nginx支持.htaccess文件的问题。王轶认为,Nginx能够支持.htaccess规则,且兼容Apache规则。我认为,Nginx支持使用.htaccess文件来存储Nginx的伪静态规则,不兼容.htaccess规则。

  我之所以这么说,是有原因的,我查阅了Nginx的官方文档文档1/文档2,文档1是Nginx的Rewrite模块的doc,详细的解释了nginx的rewrite规则组成,在其中,我没有找到关于Apache的规则,在文档2中,文档说明了为什么不使用.htaccess文件 并将Nginx和Apache进行比较。众所周知,Nginx不支持.htaccess规则,开源中国的站长红薯曾发过一篇文章:谁说nginx不支持.htaccess,在我看来,红薯是在混淆视听,偷换了概念,我们说的是.htaccess规则,而红薯说的是.htaccess文件。

  说了那么多废话。接下来我分析一下nginx为什么不支持.htaccess,主要有以下几个方面。

  1. 性能需要:在文档2中我们可以知道,Apache处理伪静态规则时会依次搜索各个目录下的.htaccess文件,这样就会造成大量的查询,影响性能,与Nginx的设计理念不符。

  2. 软件模式决定:Apache设计时便是动态加载这一点,可以从Apache处理.htaccess文件看出来。你修改了.htaccess后,就可以马上生效,包括Apache加载模块也是动态加载,而Nginx则是写死的规则,修改后需要重载nginx才可以.Tengine虽然提供了动态加载模块,但仍需要重载设置才能生效,可以说是在”伪动态”。

  3. 北方毛熊的自尊心作祟:Apache后面有美帝的身影http://www.40099.cc/life/183.html,毛熊们觉得要是兼容了就有点低声下气。所以搞出自己的版本。

  关于.htaccess应用于Nginx的可行性分析。在我看来,.htaccess不可能应用于LNMP平台的商业化。主要有以下几个原因:

  1. 安全性较低。

  由于Nginx是先加载配置文件,然后才运 行,所以,如果你用的虚拟主机有一个爱折腾的邻居,万一那个家伙手残了,改错了,你也会无法访问,随之遭殃。

  2. 操作不便。

  Nginx因为是先载入配置文件,所以,在每次修改完需要重启Nginx,你是否给用户ssh密码以方便其重启?如果不给密码使用php中的exec,又会有跨站的危险。如果开启了Chroot,exec就没有效果了。

  总结:实际上nginx不仅仅支持.htaccess文件,你甚至可以使用.mp3来放伪静态规则。但是,为了安全起见,我建议你使用默认的conf文件来保存rewrite规则。毕竟,说不定那天手贱就把目录清空了,规则就没了。Nginx也因此崩溃


来自  https://www.cnblogs.com/liuxinyufx/p/4211998.html


其实nginx和.htaccess一点关系都没有,只是一大堆人深受apache的影响觉得nginx应该也要支持.htaccess功能。在nginx的配置中直接include .htaccess文件就好

include /站点目录/.htaccess;

多么简单,但是更让人哭笑不得的是有大部分人根本就不知道nginx与apache是两个不同webserver程序,于是不少人这么干:在nginx里include .htaccess文件后,把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、修改虚拟主机配置

 代码如下复制代码
# ee /usr/local/etc/nginx/nginx.conf 

 #freebsd 7.2默认nginx默认安装的配置文件 
在你需要添加伪静态的虚拟机中的server块中引入.htaccess文件

 代码如下复制代码
include /usr/www/.htaccess 

 #请把这个改成你.htaccess文件的位置, 
保存、退出重启nginx

 代码如下复制代码
# /usr/local/etc/rc.d/nginx restart 

刷新看看,如果能正常器从证明你的rewrite rule的语法是正确

nginx的rewrite规则您可以直接放在主机配置中也可以放在独立的文件用includeinru,存为独立的文件时,保存到一个新的文件(文件名可以任意取,不过建议还是用.ht(注意有个“点”)开头的文件名,因为这个服务器里面默认过滤了外部对.ht开头的文件访问:

 代码如下复制代码

location ~ /.ht { 
    deny  all; 
}

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索站点 , 文件 , 程序 , 代码 , 配置 伪静态 nginx 499解决办法、不支持配件的解决办法、不支持dx11解决办法、nginx .htaccess、htaccess转nginx,以便于您获取更多的相关知识。

来自  https://yq.aliyun.com/ziliao/46421

普通分类: