Nginx, 重写 url 为一个有条件的子域,没有新的虚拟主机
Nginx, rewrite url for one subdomain with condition, without new virtual host
我正在尝试为一个特定的子域重写 URL。合乎逻辑的解决方案似乎是使用 if-else 来检查当前子域是否是那个子域。
我不想要一个新的虚拟主机,因为我通常为子域设置了很多东西,如果我为每个子域都做一个很长的部分会很混乱。
使用 Apache 很简单,只需一个 .htaccess 文件即可。在 nginx 中有没有一种方法可以像这样工作?
我试过的是这样的:
if ($subdomain = 'foo') {
rewrite ^/(.*)$ /index.php?_url=/;
}
无效。知道怎么做吗?
P.S.: 澄清一下:变量 $subdomain
包含子域的名称。它们看起来像:subdomain.martinfejes.hu.
您需要像这样使用正则表达式匹配:
server {
server_name ~ ^foo\.;
location / {
rewrite ^/(.*)$ /index.php?_url=/;
}
}
这是一种糟糕的方法 - 因为 nginx 以非常非常快的方式处理虚拟主机,这与处理条件相反。一般来说,条件由 "simple virtual stack machine" 解释(参见 http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#internals)并且很慢。
此外,使用虚拟主机将限制可能的副作用,就像现在和未来的配置复杂性一样。
我正在尝试为一个特定的子域重写 URL。合乎逻辑的解决方案似乎是使用 if-else 来检查当前子域是否是那个子域。
我不想要一个新的虚拟主机,因为我通常为子域设置了很多东西,如果我为每个子域都做一个很长的部分会很混乱。
使用 Apache 很简单,只需一个 .htaccess 文件即可。在 nginx 中有没有一种方法可以像这样工作?
我试过的是这样的:
if ($subdomain = 'foo') {
rewrite ^/(.*)$ /index.php?_url=/;
}
无效。知道怎么做吗?
P.S.: 澄清一下:变量 $subdomain
包含子域的名称。它们看起来像:subdomain.martinfejes.hu.
您需要像这样使用正则表达式匹配:
server {
server_name ~ ^foo\.;
location / {
rewrite ^/(.*)$ /index.php?_url=/;
}
}
这是一种糟糕的方法 - 因为 nginx 以非常非常快的方式处理虚拟主机,这与处理条件相反。一般来说,条件由 "simple virtual stack machine" 解释(参见 http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#internals)并且很慢。
此外,使用虚拟主机将限制可能的副作用,就像现在和未来的配置复杂性一样。