nginx 使域的根目录进入子文件夹

nginx 使域的根目录进入子文件夹

我认为我想要完成的事情类似于问题(https://serverfault.com/questions/232051/rewrite-a-subdirectory-to-root-on-nginx#=)但我会尝试更好地解释

因此,我尝试将域的根目录(example.com)重写为 example.com/curr 文件夹,除非 curr 已在请求中

例1:

example.com/ 应重写为 example.com/curr/

指向位于其中的 index.php,并为其提供服务(使用 php5-fpm 运行 php)

示例2:

example.com/curr 应该被传递,以便能够提供文件

示例3:

example.com/app 也应该直接进入它的目录

当前代码(不起作用,500 ISE):

location / {
  try_files $uri $uri/ v1/$uri/ /curr/index.php?q=$uri&$args;
}

#location ~* ^/([a-zA-Z0-9\-]+)$ {
#   root /webroot/www/myfolder/;
#   try_files /curr/$1;
#}

location ^~ /p/ {
  rewrite ^/(.*)$ /curr/index.php?p=$1 last;
}

注意:如果定义了页面,此处的最后一个位置定义重写,这个位置工作正常,并且应该具有与根目录非常相似的语法

谢谢你的协助。

更新:我也尝试过

location / {
  try_files @missing;
}

location /curr/{
  try_files $uri $uri/;
}

location @missing {
  rewrite ^ /curr/index.php?q=$request_uri&$args?;
}

根据链接的问题,类似这样的方法应该可以工作,但这只会给我根目录上的索引页

编辑:我想这样做是因为我的所有子域文件夹都在 web/ 文件夹中,而我不希望它们位于主网站文件夹中。我喜欢将所有内容分开,并且仍然可以方便地从 fe FTP 访问

编辑2:

我已经将它调到一切正常,除了“example.com”,它仍然会给我一个 500 错误

代码:

location / { rewrite ^ /curr/$uri last; }
location = / { rewrite ^ /curr/ last; }

location ^~ /curr/ {
  try_files $uri $uri/;
}

(另请注意,仅使用location = / { rewrite ^ /curr/ last; }它可以正确呈现主页(但不是其他所有内容))

答案1

怎么样:

  location / {
     rewrite ^ /curr/ last;
  }

经过以下讨论后进行编辑:

#Default is to rewrite
location / { 
    rewrite ^ /curr$uri last; 
}

#Except if request already begins with curr...
location ^~ /curr/ {

}

#...OR it has a directory already (/curr/ will have matched above)
location ~ /(.*)/(.*) {

}

我并不确信这是实现您想要实现的目标的最佳方式,但我认为它应该可以回答您的问题。

我认为 try_files 无法实现您想要的效果(并且在您的示例中根本不会实现,因为它会让您陷入无限循环),就好像 index.html 存在于根目录中一样,它不会将您重定向到 /curr/ 它会在根目录中加载 index.html。

相关内容