有人可以帮我解决我的nginx重写规则吗?我有这样的问题
如果在www.abc.com/name_dir/*中找不到文件,它将重定向到www.abc.com/name_dir/index.php。
例如: 在www.abc.com/xxx/*中找不到重定向到www.abc.com/xxx/index.php 未在www.abc.com/yyy/*中找到重定向到www.abc.com/yyy/index.php 在www.abc.com/zzz/*中找不到重定向到www.abc.com/zzz/index.php 在www.abc.com/kk/*中找不到重定向到www.abc.com/kkk/index.php ... 问题我有千名name_dir。我有像这样的nginx.conf
if (-f $request_filename) {
break;
}
if (-d $request_filename) {
rewrite (^.+$) $1/
break;
}
if (!-e $request_filename) {
rewrite ^/xxx/(.*)$ /xxx/index.php?$1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
}
在上面的配置中,只重定向name_dir xxx。重写规则如何重定向所有目录? 谢谢你的帮助
答案 0 :(得分:2)
你想在这里使用try_files到check for the existence of files而不是if语句(因为在Nginx中If是邪恶的)。
要到一个目录,它就像:
location /xxx/{
try_files $uri $uri/ /xxx/index.php;
index index.php
}
这样做首先尝试将uri作为文件。如果这不起作用,它将尝试作为目录。如果两者都不起作用,它将默认为/ xxx /的index.php。额外的索引行是为了防止它显示空白页面,如果你直接转到whatever.com/xxx
使用正则表达式,我们可以扩展此规则以使用多个目录:
location ~* ^(/.*)/{
try_files $uri $uri/ $1/index.php?$uri&$args;
index index.php
}
这应该获取完整的目录结构并将其路由到适当的索引。
如果您只想要第二个示例转到yyy / index.php,请在该位置使用此正则表达式:
^(/.*?)/