Nginx,为一个具有条件的子域重写url,没有新的虚拟主机

时间:2015-01-03 09:51:15

标签: .htaccess mod-rewrite nginx subdomain

我正在尝试重写一个特定子域的URL。逻辑解决方案似乎是使用if-else检查当前子域是否是那个。

我不想要一个新的虚拟主机,因为我有很多设置为子域的东西,如果我为每个子域做了一个很长的部分,它会很混乱。

使用Apache,它很容易,只是一个.htaccess文件,我想要和完成。在nginx中有一种方法可以像这样工作吗?

我尝试的是这样的:

if ($subdomain = 'foo') {
    rewrite ^/(.*)$ /index.php?_url=/$1;
}

不起作用。知道怎么样?

P.S。:只是为了澄清:变量$subdomain包含子域名。他们看起来像:subdomain.martinfejes.hu。

2 个答案:

答案 0 :(得分:3)

这是一个糟糕的方法 - 因为nginx以非常快的方式与虚拟主机一起工作,与使用条件相反。一般来说,条件由"简单的虚拟堆栈机器"解释。 (见http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#internals)并且速度慢。

此外,使用虚拟主机将限制可能的副作用,就像现在的配置复杂性一样。

答案 1 :(得分:0)

你需要像这样使用正则表达式匹配:

server {
    server_name ~ ^foo\.;

    location / {
       rewrite ^/(.*)$ /index.php?_url=/$1;
    }
}