【发布时间】:2021-12-28 11:17:57
【问题描述】:
我在根目录下有多个动态 url,需要编写如下。例如
https://mv.test/review/4
https://mv.test/investment-banker/banking-products--004
第一个网址 /Reviews/ 工作正常,但第二个网址将进入 404 页面。我无法理解为什么它不起作用。
定位块
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
location /review/ {
rewrite "^/review/([0-9]+)$" /review.php?id=$1 last;
}
location /store/ {
rewrite "^/(.*)/(.*)$" /store.php?store_type=$1&store_owner=$2 last;
}
【问题讨论】:
-
您的第一个示例 URI 与您的第一个位置块
location /review/ { ... }不匹配,也许您的意思是/review/4而不是/reviews/4?此外,您无需指定如何处理诸如/review/some-non-digital-string之类的 URI,通常您希望显示一些自定义的“未找到”页面。您的第二个示例 URI/investment-banker/banking-products--004显然与您的第二个位置块location /store/ { ... }不匹配,因为它不以/store/前缀开头。 -
嗨 @IvanShatsky,感谢您突出显示 /Reviews/ 错误。我已经纠正了。对于第二个 url,虽然文件名 {store.php} 当前位于根目录中,但我也尝试过,将其放入存储文件夹中。如果我将此重写代码放在根位置块下,那么也没有任何作用。
-
location /store/必须与 URL 匹配。所以它只匹配像https://mv.test/store/...这样的 URL 而不是https://mv.test/investment...- 所以不清楚为什么你希望最后一个块重写第二个 URL。 -
嗨@RichardSmith,我想用位于根目录的php脚本重写第二个url,名称为
store.php。两个查询字符串investment-banker/banking-products--004本质上是动态的,将变为 21 种不同类型的服务。虽然我能够使用https://mv.test/store/investment-banker/banking-products--004成功重写 url。但我想改写为https://mv.test/investment-banker/banking-products--004。
标签: nginx nginx-location