我目前正在使用nginx将现有网站的新版本移植到新的服务器上,并且已经被告知URL需要指向新的PHP文件来处理如何从新的数据库中挑选date。
一个传入url的例子是:
https://testsite.com/test-account-here-ABC-123456.html
这是由nginx抓到并redirect到
https://testsite.com/profiles.php
在那里文件将做它的位,并提取url,以获得其细节,并进行search。
我已经build立了一个redirect的前提下,$ request_uri在URL中find** – ABC- *,如下所示:
if ($request_uri ~ ^/(.*)-ABC-) { return 302 $scheme://testsite.com/profile.php; }
成功去那个PHP文件,但我需要能够从URL(123456)中提取数字,所以我可以通过查询string在PHP文件中访问它们,我试图用户
return 302 $scheme://testsite.com/profile.php?url=$request_uri;
但是这会返回导致无限redirect循环和浏览器错误的完整url。
有无论如何,你可以提取一个$ request_uri的部分,然后重新使用redirect?
东西沿线
return 302 $scheme://testsite.com/profile.php?url=$variable1;
如果数字始终在.html后缀之前,则可以使用此configuration:
location ~ ^/.+-ABC-([0-9]+)\.html$ { return 302 $scheme://testsite.com/profile.php?url=$1; }
使用location是在nginx中执行这些事情的首选方法。 ~告诉nginx使用正则expression式匹配find位置。 之后和之前的string{是实际的正则expression式string。
在这里,我们匹配任何string,在开始处有任何字符,然后是-ABC- ,然后是任何数字,然后以.html后缀结尾。
数字被捕获到variables$1 ,因为该部分的正则expression式在括号内。
如果你想进一步详细说明正则expression式,那么有很多在线的正则expression式工具,你可以testing你的修改。