首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写规则nginx

问重写规则nginx
EN

Stack Overflow用户
提问于 2011-03-23 17:44:16
回答 1查看 3.1K关注 0票数 0

谁能帮我把我的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

代码语言:javascript
复制
    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。如何重写规则重定向所有目录?谢谢你的帮助

EN

回答 1

Stack Overflow用户

发布于 2011-04-18 16:38:59

您希望在这里使用try_files来执行检查文件是否存在,而不是if语句(因为If's在Nginx中是邪恶的)。

要到一个目录,它将类似于:

代码语言:javascript
复制
location /xxx/{
   try_files $uri $uri/ /xxx/index.php;
   index index.php
}

这样做的目的是首先将uri作为文件进行尝试。如果这不起作用,它将尝试作为一个目录。如果两者都不起作用,它将默认为/xxx/的index.php。额外的索引行是防止它显示一个空白页,如果你直接进入任何网站/xxx

使用regex,我们可以展开此规则以处理多个目录:

代码语言:javascript
复制
location ~* ^(/.*)/{
   try_files $uri $uri/ $1/index.php?$uri&$args;
   index index.php
}

这将获取完整的目录结构,并将其路由到适当的索引中。

  • abc.com/yyy/Notualant.php ==> yyy.com/yyy/index.php
  • abc.com/yyy/zzz/Notualant.php ==> yyy.com/yyy/zzz/index.php

如果只想让第二个示例转到yyy/index.php,那么可以在这个位置使用这个regex:

代码语言:javascript
复制
^(/.*?)/
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5409413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档