nginx重写configuration

我对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 ~* ^([az]+)\..*) { rewrite ^(.*)$ /index.php?/$1/$request_uri; } rewrite ^ /index.php?/$request_uri; 

真的很感谢您可以给的任何帮助!

谢谢。

首先:使用if是由Nginx作者气馁的一个很好的理由:它有非常讨厌的副作用。 您仍然可以在简单的使用情况下使用它,但是if同时使用和rewrite就像是一个炸弹。

您的用例可以使用两个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; } 

你可以改变你的规则

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

但不幸的是,你得到“path”像“/index.php?/s1.domain.com/asd/sad/sad”,而不是“/index.php?/s1/asd/sad/sad”,因为你似乎是后。

你能简单地在你的PHP脚本中使用$_SERVER['HTTP_HOST']variables,并找出脚本本身的适当变化,而不是让nginx做所有的工作吗?

编辑添加:

在您发表您对FuelPHP的评论之前写过这篇文章; 不知道那是什么,但我认为这意味着你不能或不愿意(不是那样坏事)按照我的build议改变脚本。 尽pipe你在那里发布的Apache规则并不会自动完成你所要求的任何给定的子域名,但是它可以在dev.domain.com上使用,而不是其他的。