codeigniter - 在 nginx 位置 block 中对变量使用正则表达式

标签 codeigniter nginx

使用 nginx 和 CodeIgniter,我的服务器配置中有一个位置块,用于处理我的项目的路由,如下所示:

location /beta/ {
    try_files $uri $uri/ /beta/index.php;
}

这工作正常,但我对这个 CodeIgniter 项目执行备份并将它们移动到另一个文件夹。 “beta”项目被重命名(带有时间戳)。所以我有一个备份文件夹,其中包含如下命名的 CodeIgniter 项目:
backups/beta_2013_05_21_0857
backups/beta_2012_05_23_0750

我想要做的是创建另一个处理这些变量命名项目的位置规则,但到目前为止所有使用正则表达式的尝试都失败了。如果我直接命名项目,它确实有效。
location /backups/beta_2013_05_21_0857 {
    try_files $uri $uri/ /backups/beta_2013_05_21_0857/index.php;
}

但显然我不想为每个文件夹创建规则。有没有人知道如何解决这个问题?这就是我试图解决问题的方式:
location /backups/^\w+$/ {
    try_files $uri $uri/ /backups/$1/index.php;
}

最佳答案

两个可能的问题:

  • 您的正则表达式中没有任何括号,因此它不会成为捕获组。你错过了 ~* 命令告诉 Nginx 做一个正则表达式匹配。
    location ~* ^/backups/(\w+)$ {
        try_files $uri $uri/ /backups/$1/index.php;
    }
    
  • try_files 中的最后一个参数很神奇。它实际上并没有尝试查看文件是否存在。相反,它使用最后一个参数重写请求 URI 并重新处理请求,这有点令人惊讶。要解决此问题,您可以(并且应该)退回到 404 或其他页面。
    location ~* ^/backups/(\w+)$ {
        try_files $uri $uri/ /backups/$1/index.php /404_static.html; 
    }
    
    location = /404_static.html {
        root   /documents/projects/intahwebz/intahwebz/data/html/;
        internal;
    }
    

  • 顺便说一句,如果您还有其他问题,您应该启用 rewrite_log on;它将在通知级别将匹配写入服务器错误文件,并帮助找出位置匹配问题。

    关于codeigniter - 在 nginx 位置 block 中对变量使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16717052/

    相关文章:

    php - 用于将 get 参数传递给索引函数的 Codeigniter 路由

    python - Djangocollectstatics仅收集管理静态文件

    linux - shell找不到nginx

    python - python中的tcp套接字客户端如何与uwsgi对话?

    php - codeigniter/php - 连接两个 POST 变量以形成一个新变量

    php - mysql 插入批处理与插入循环 (codeigniter)

    php - 显示 $query->result();

    php - codeigniter 加载一个模型,该模型具有带参数的构造函数

    javascript - 聊天系统实现

    php - 使用 PHP、MySQL、nginx 同时运行多个 Dockerize 项目