微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;这将在通知级别将匹配写入服务器错误文件,并帮助找出位置匹配问题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐