![nginx 重写为按字母顺序排列的子目录](https://linux22.com/image/562180/nginx%20%E9%87%8D%E5%86%99%E4%B8%BA%E6%8C%89%E5%AD%97%E6%AF%8D%E9%A1%BA%E5%BA%8F%E6%8E%92%E5%88%97%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95.png)
我正在尝试将以下 Apache mod_rewrite 规则转换为适当的 nginx 格式:
RewriteCond %{REQUEST_FILENAME} (.*)/([^\/])([^\/]+)/?$
RewriteCond %1/%2/%2%3 -d
RewriteRule ^/?.* /%2/%2%3 [L]
实际上,该规则会重写裸目录请求,根据第一个字符(区分大小写)将它们放置在父目录中,依此http://example.com/foobar
类推http://example.com/f/foobar
。
其余所有内容要么是静态内容,要么是 PHP,并通过 FastCGI 传递,并且有location
处理程序来处理它们。
答案1
好吧,你会在第二次中丢失目录测试RewriteCond
,但是:
rewrite ^/([^/])([^/]+)/?$ /$1/$1$2 last;
答案2
location ~ /([^/])([^/]+)/?$ {
set $firstletter $1;
set $sub $2;
if (-d $request_filename) {
rewrite ^ /$firstletter/$firstletter$sub last;
}
}