Nginx的dynamic子文件夹为fastcgi_param

我有一个由Nginx服务的PHP网站。 我希望能够通过不同的子文件夹访问它。 基本上,用户可以注册,当他们select设置一个“url”。 基于此,他们将访问这样的网站:

example.com/{url} 

我也可以这样做:

 example.com/s/{url} 

如果这将有助于检测它。

我想让Nginx抓住这个URL并使用fastcgi_param将它传递给PHP。 另外,我希望PHP的行为就像是通过example.com访问网站。 例如, example.com/s/{url}/about将与example.com/about相同。

如果我正确地理解了你的问题,你想从传递给PHP的URL中去掉网站URLpath组件的第一部分。 这是你如何做到的:

 location ~ ^(?<userurl>[^/]+)(<dest>/.+)$ { rewrite ^ $dest break; } 

所以,这将改变这样的url:

http://example.com/about/something成为http://example.com/something

http://example.com/about变成http://example.com/

正则expression式还会捕获第一个/到variables$userurl之后的部分,您可以在fastcgi_param使用它来将URL的一部分传递给PHP脚本。

但是,我build议在PHP脚本中实现前端控制器模式,而不是将nginx和PHP脚本分开。 这意味着,它将parsing$_SERVER['REQUEST_URI']并根据您在PHP中实现的规则处理请求。

然后,在nginx中你只需添加:

 try_files $uri $uri/ /index.php; 

在虚拟主机部分处理请求。