nginx从request_uri中提取并将其添加到redirct目标

我目前正在使用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你的修改。