Nginx常用的 URL 重写方法

发布时间:2020-12-05编辑:脚本学堂
url重写应该不陌生,不管是SEO URL 伪静态的需要,还是在非常流行的wordpress里,重写无处不在。

    url重写应该不陌生,不管是SEO URL 伪静态的需要,还是在非常流行的wordpress里,重写无处不在。这里我们来看下nginx中常用的url重写方法,供大家学习参考。

1. 在 apache 的写法

复制代码 代码如下:
RewriteCond  %{HTTP_HOST}  nginx.org
RewriteRule  (.*)  http://www.nginx.org$1

在 Nginx 可以对应写成:

复制代码 代码如下:
server {
    listen       80;
    server_name  www.nginx.org  nginx.org;
    if ($http_host = nginx.org) {
        rewrite  (.*)  http://www.nginx.org$1;
    }
    ...
}

但 Nginx 作者更建议的方法是:

复制代码 代码如下:

server {
    listen       80;
    server_name  nginx.org;
    rewrite   ^  http://www.nginx.org$request_uri?;
}

server {
    listen       80;
    server_name  www.nginx.org;
    ...
}

FAQ:
1. 请教一下,nginx的rewrite规则怎么写?
比如将 http://http://www.oschina.net/222.html rewrite为 http://http://www.oschina.net/222.htm

复制代码 代码如下:
location ~ .*.(html)$
    {
      rewrite ^(.*).html  $1.htm permanent;
    }

2. 下面url要怎么写rewrite?
www.aaa.com/search/?wd=搜索内容  ==> www.aaa.com/searchpage?keyword=搜索内容

复制代码 代码如下:
location ~ ^/search/ {
            rewrite (.*) /searchpage$1 ;
}

3. 请求的url如下 /item/12345/index.html 重定向到/item/12/12345/index.html
规则就是id除1000,如果小于id小于1000,则为/item/0/id/index.html
不知道说清楚没有,这个rewrite规则该怎么写啊?

刚看了文档(http://wiki.nginx.org/HttpRewriteModule),似乎可以
/photos/123456  -> /path/to/photos/12/1234/123456.png

复制代码 代码如下:
rewrite  "/photos/([0-9] {2})([0-9] {2})([0-9] {2})" /path/to/photos/$1/$1$2/$1$2$3.png;

这里有一个apache htaccess 文件转 nginx rewrite的工具:
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/

您可能感兴趣的文章:
nginx rewrite(nginx url地址重写)的配置示例
nginx实现url重写-rewrite实例参考
nginx中一些常用的 URL 重写方法
nginx配置url重写及自定义404错误页面等
超详细的 NGINX URL重写实例讲解