我目前正在使用 nginx 将现有网站的新版本移动到新服务器上,并被告知 URL 需要指向一个新的 PHP 文件来处理如何从新数据库中挑选出日期。
传入 URL 的示例为:
https://testsite.com/test-account-here-ABC-123456.html
这将被 nginx 捕获并重定向到
https://testsite.com/profiles.php
文件将在其中执行其操作并提取 URL 以获取其详细信息并执行搜索。
我已经在 $request_uri 在 url 中找到 **-ABC-* 的前提下设置了一个重定向,如下所示:
if ($request_uri ~ ^/(.*)-ABC-)
{
return 302 $scheme://testsite.com/profile.php;
}
成功转到该 PHP 文件,但我需要能够从 URL (123456) 中提取数字,以便我可以通过 PHP 文件中的查询字符串访问它们,我尝试使用
return 302 $scheme://testsite.com/profile.php?url=$request_uri;
但这会返回完整的 url,从而导致无限重定向循环和浏览器错误。
有没有什么办法可以提取 $request_uri 的部分内容然后在重定向中重新使用?
类似于
return 302 $scheme://testsite.com/profile.php?url=$variable1;
答案1
如果数字始终位于.html
后缀之前,则可以使用此配置:
location ~ ^/.+-ABC-([0-9]+)\.html$ {
return 302 $scheme://testsite.com/profile.php?url=$1;
}
在 nginx 中,使用location
是执行此类操作的首选方式。 告诉~
nginx 使用正则表达式匹配来查找位置。 之后和之前的字符串{
是实际的正则表达式字符串。
在这里,我们匹配任何以任意字符开头,后跟-ABC-
任意数字,然后以.html
后缀结尾的字符串。
数字被捕获到一个变量中$1
,因为该部分的正则表达式位于括号内。
如果您想进一步阐述正则表达式,网上有很多正则表达式工具可以用来测试您的修改。