0

我在玩 Nginx 并安装了一个需要重写的 cms 系统,正常的代码是:

location / { try_files $uri $uri/ @rewrites; }

location @rewrites {
        rewrite ^/([^/\.]+)/([^/]+)/([^/]+)/? /index.php?page=$1&id=$2&subpage=$3 last;
        rewrite ^/([^/\.]+)/([^/]+)/?$ /index.php?page=$1&id=$2 last;
        rewrite ^/([^/\.]+)/?$ /index.php?page=$1 last;
}

但是这个 CMS 我安装在另一个名为 testcms 的目录中。所以我认为这会起作用:

location /testcms {

fastcgi_pass phpcgi;
fastcgi_index index.php;

try_files $uri $uri/ /testcms@rewrites;

}

location /testcms@rewrites {
        rewrite ^/([^/\.]+)/([^/]+)/([^/]+)/? /testcms/index.php?page=$1&id=$2&subpage=$3 last;
        rewrite ^/([^/\.]+)/([^/]+)/?$ /testcms/index.php?page=$1&id=$2 last;
        rewrite ^/([^/\.]+)/?$ /testcms/index.php?page=$1 last;
}

但这会导致出现白页,并且 nginx 日志中没有错误。知道我可能做错了什么吗?

4

1 回答 1

0

有语法错误。应该是这样的

try_files $uri $uri/ @rewrites;

}

location @rewrites {

来自 Nginx手册

前缀“@”指定一个命名位置。在正常处理请求期间不使用此类位置,它们仅用于处理内部重定向的请求

于 2012-05-25T10:29:16.453 回答