谁能帮我把我的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/yyy/index.php中没有找到www.abc.com/zzz/*重定向到www.abc.com/zzz/index.php,在www.abc.com/kk/* redirecttowww.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。如何重写规则重定向所有目录?谢谢你的帮助
发布于 2011-04-18 16:38:59
您希望在这里使用try_files来执行检查文件是否存在,而不是if语句(因为If's在Nginx中是邪恶的)。
要到一个目录,它将类似于:
location /xxx/{
try_files $uri $uri/ /xxx/index.php;
index index.php
}这样做的目的是首先将uri作为文件进行尝试。如果这不起作用,它将尝试作为一个目录。如果两者都不起作用,它将默认为/xxx/的index.php。额外的索引行是防止它显示一个空白页,如果你直接进入任何网站/xxx
使用regex,我们可以展开此规则以处理多个目录:
location ~* ^(/.*)/{
try_files $uri $uri/ $1/index.php?$uri&$args;
index index.php
}这将获取完整的目录结构,并将其路由到适当的索引中。
如果只想让第二个示例转到yyy/index.php,那么可以在这个位置使用这个regex:
^(/.*?)/https://stackoverflow.com/questions/5409413
复制相似问题