Nginx不支持.htaccess也不建议采用.htaccess机制

有人采用这样的方法,让 Nginx 支持 .htaccess :

  1. 新建一个 .htaccess 文件,并写上 Nginx 的 rewrite 规则,上传到网站根目录,如下示例

    rewrite ^/post/([0-9]+)/?$ /read.php?p=$1 last;

  2. 修改 Nginx 虚拟主机的配置文件,在 server 块中引入这个 .htaccess 文件

    include /var/www/site/.htaccess

  3. 同时将增加如下配置,防止 .ht 开头的文件被外部访问

    location ~ /.ht
    {

    deny all;

    }

  4. 重启 Nginx 服务。

这种方法有一个缺点在,每次修改 .htaccess 文件,需要重新启动 Nginx 服务,以使之生效。更大的缺点在于,如果某个虚拟主机下的 .htaccess 文件有问题,将导致 Nginx 无法重启。

而 Apache 的 .htaccess 实现的原理是,对于每个请求,都会去读取该文件。如果该请求是一个深层次目录,服务器还会逐级查询并解析每个目录下的 .htaccess 文件,子目录会覆盖上层目录的配置。所以,.htaccess 文件的每次修改都会即时生效。但是,这在效率上,是有很大影响的。另外,Apache 的 .htaccess 配置不会影响其它虚拟主机的配置,各自是相互独立的。

也就是上面的实现方法,本质上与 .htaccess 的原理是完全不同的。

在 Nginx 官网上的说明是:实现不了,也没必要。并且列出了一堆数据,来表明 .htaccess 对性能的影响相当大。Nginx 的设计原则是效率优先。

那么如果在 Nginx 主机上实现 URL 重写呢。当然是直接在配置文件中,修改相应的 server 段。

标签: nginx

添加新评论