我对nginx相当陌生,并试图设置一些非常简单的重写规则,但他们似乎并没有工作。
只是为了您的信息,这台server { .. }
有它的server_name domain.com *.domain.com
。
我有这个rewrite ^ /index.php?/$request_uri;
这似乎很好。 这将匹配domain.com/asd/sad/sad,一切正常。
不过,我想做一些有趣的子域名…所以我有s1.domain.com
和s198.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上使用,而不是其他的。