nginx子域重写

时间:2010-03-23 09:27:52

标签: regex nginx mod-rewrite

我需要一个nginx重写规则来重写:

http://some-keyword.example.comwww.example.com/keyword.php?keyword=$some-keyword

虽然前面没有www的域仍然会重写为www.example.comwww不会被视为关键字。

请你帮我解决这个问题,如何编写这两条规则?

3 个答案:

答案 0 :(得分:7)

如果您的意思是重定向,那么:

server {
  server_name ~^(.*)\.example\.com$ ;

  rewrite ^ http://www.example.com/keyword.php?keyword=$1 redirect;
}

重写的情况下,只需执行

server {
  server_name example.com ~^(.*)\.example\.com$ ;

  rewrite ^ /keyword.php?keyword=$1 break;

#  location /keyword.php {
#    ....
#  }
}

答案 1 :(得分:2)

rewrite ^/list-c-([0-9]+)-k-(.+)-o-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&p=$3 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-price-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&price=$3 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=1 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=$4 last;

答案 2 :(得分:0)

如果有可能我只创建1个服务器(虚拟主机),这是正常的domain.com / www.domain.com,然后使用conf将其余部分重写给他们

server {
    server_name domain.com www.domain.com;
    # normal handling for files
}

server {
    server_name ~(?<subdomain>[^\.]*).domain.com;
    location / {
        try_files keyword.php?keyword=$subdomain =404;
    }
}

如果我错过了什么,请告诉我。