因此,如果我们在 nginx.conf 的位置块中执行以下操作:
try_files $uri $uri/ /index.php?$args;
如果我们执行类似以下操作,则会从 Web 服务器的根文件夹调用 index.php 文件https://www.example.com/john。
我们该如何编写以便它调用的 index.php 文件是其父文件夹中的文件?
例如:https://www.example.com/thisparent/john
这将使用来自此位置的 index.php 文件:https://www.example.com/thisparent/
这必须适用于 Web 服务器的任何位置,其中漂亮的 URL 将来自所请求 URL 的父级。
答案1
为了在内部将 URI 路径重定向/parent/child
到/parent/index.php
,您需要计算父目录的路径/parent
,因为nginx没有为父目录提供变量。
例如,您可以使用:
location ~ \.php$ {
# PHP FASTCGI configuration
}
# Matches are eager, so the first group matches everything
# up to the last '/'. We capture it into the $parent named variable.
location ~ ^(?<parent>.*)/ {
try_files $uri $parent/index.php$is_args$args;
}
最后一个位置的正则表达式匹配所有可能的 URI 路径,因此它必须是块中的最后一个server
,并且优先于所有正常前缀位置(具有^~
和精确位置的位置除外)。
一种不那么激进的解决方案是使用命名位置作为try_files
指令的后备:
location / {
try_files $uri @parent_index;
}
location ~ \.php$ {
# PHP FASTCGI configuration
}
location @parent_index {
rewrite ^(?<parent>.*)/ $parent/index.php;
}
答案2
我用于 nginx 的简单解决方案,仅更改一行。
在位置块中将 try_files 更改为:
location / {
try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
}
这对我来说在 nginx 上非常完美:)