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

.htaccess Nginx,重写一个子域的url,有条件,没有新的虚拟主机,.htaccess,mod-rewrite,nginx,subdomain,.htaccess,Mod Rewrite,Nginx,Subdomain,我正在尝试只为一个特定子域重写URL。逻辑解决方案似乎是使用if-else来检查当前子域是否就是那个子域 我不想要一个新的虚拟主机,因为我有很多东西都设置到了子域,如果我为每个子域都做了一个长的部分,那会很混乱 使用Apache,这很简单,只是一个.htaccess文件,我想在其中完成操作。nginx中有没有一种方法可以做到这一点 我尝试的是这样的: if ($subdomain = 'foo') { rewrite ^/(.*)$ /index.php?_url=/$1; } ser

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

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

使用Apache,这很简单,只是一个.htaccess文件,我想在其中完成操作。nginx中有没有一种方法可以做到这一点

我尝试的是这样的:

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

    location / {
       rewrite ^/(.*)$ /index.php?_url=/$1;
    }
}
不起作用。知道怎么做吗


附言:只是澄清一下:变量
$subdomain
包含子域的名称。它们看起来像:subdomain.martinfejes.hu。

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

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

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

这是一种糟糕的方法——因为nginx以非常非常快的方式与虚拟主机协同工作,而不是与环境协同工作。通常情况下,通过“简单虚拟堆栈机”(请参阅)对条件进行解释,速度较慢


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

虽然这不是我想要的答案,但这是正确的。谢谢