我正在玩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日志中没有错误。 我还有什么可能做错的?
答案 0 :(得分:0)
有语法错误。应该像
try_files $uri $uri/ @rewrites;
}
location @rewrites {
来自Nginx manual:
前缀“@”指定命名位置。在正常处理请求期间不使用这些位置,它们仅用于处理内部重定向的请求