我有一个由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;
在虚拟主机部分处理请求。