我认为我想要完成的事情类似于问题(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。