nginx 重写配置

nginx 重写配置

我对 nginx 还很陌生,正在尝试设置一些非常简单的重写规则,但它们似乎不起作用。

仅供您参考,这server { .. }有它的server_name domain.com *.domain.com

我有这个rewrite ^ /index.php?/$request_uri;,它似乎工作得很好。它将匹配 domain.com/asd/sad/sad,一切正常。

但是,我想用子域名做一些有趣的事情……所以我有s1.domain.coms198.domain.com但是我想更改我的重写,以便它转到,/index.php?/s1/$request_uri如果这有意义吗?因此子域名在之前进入$request_uri

这是我迄今为止尝试过的:

if ($host ~* ^([a-z]+)\..*) {
    rewrite ^(.*)$ /index.php?/$1/$request_uri;
}
rewrite ^ /index.php?/$request_uri;

非常感谢您提供的任何帮助!

谢谢。

答案1

首先:ifNginx 作者不鼓励使用 ,原因很简单:它有非常严重的副作用。您可能仍会在简单的用例中使用它,但同时使用ifrewrite就像是一颗炸弹。

server您的用例可以使用两个部分轻松实现:

server {
  server_name domain.com;

  rewrite ^ /index.php?/$request_uri last;
}

server {
  server_name ~ ^(?<SUB>.+)\.domain.\com$ ;

  rewrite ^ /index.php?/$SUB/$request_uri last;
}

答案2

您可以将规则更改为

rewrite ^ /index.php?/$host/$request_uri;

但不幸的是,这会让您得到像 '/index.php?/s1.domain.com/asd/sad/sad' 这样的“路径”,而不是您所期望的 '/index.php?/s1/asd/sad/sad'。

您是否可以简单地$_SERVER['HTTP_HOST']在 PHP 脚本中使用变量并在脚本本身中找出适当的更改,而不是让 nginx 完成所有工作?

编辑后添加:

在你发表关于 FuelPHP 的评论之前写了这篇文章;不知道那是什么,但我猜想这意味着你无法或不愿意(这并不是一件坏事)按照我的建议对脚本进行更改。虽然你在那里发布的 Apache 规则不会自动执行你对任何给定子域的要求——它适用于 dev.domain.com,但不适用于其他。

相关内容