我有以下针对 nginx 的重写规则。
规则似乎无法正常运行,例如游戏规则应该重写http://thegamesdb.net/game/2/
为http://thegamesdb.net/index.php?tab=game?id=2
悬停,当我导航到 /game/2/ 时,浏览器正在下载一个名为的文件download
。
我的重写规则如下:
# nginx configuration
location /game {
rewrite ^/game/([0-9]+)(/?)$ /index.php?tab=game&id=$1 break;
rewrite ^/game-edit/([0-9]+)(/?)$ /index.php?tab=game-edit&id=$1 break;
}
location /search {
rewrite ^/search/([a-z0-9\-\ /\+]+)(/?)$ index.php?tab=listseries&string=$1&function=Search break;
rewrite ^/search(/?)$ /index.php?tab=listseries&function=Search break;
}
location /browse {
rewrite ^/browse/([0-9+]*)(/?)$ /index.php?tab=listplatform&stringPlatform=$1&function=Browse+By+Platform break;
}
location /platform {
rewrite ^/platform/([0-9]+)(/?)$ /index.php?tab=platform&id=$1 break;
rewrite ^/platform/([a-z0-9\-]+)(/?)$ /index.php?tab=platform&alias=$1 break;
rewrite ^/platform-edit/([0-9]+)(/?)$ /index.php?tab=platform-edit&id=$1 break;
}
location /favorites {
rewrite ^/favorites(/?)$ /index.php?tab=favorites break;
}
location /message {
rewrite ^/message/([0-9]+)(/?)$ /index.php?tab=message&messageid=$1 break;
}
location /adminstats {
rewrite ^/adminstats/([a-z0-9\-]+)(/?)$ /index.php?tab=adminstats&statstype=$1 break;
}
location /blog {
rewrite ^/blog(/?)$ /blog/ break;
}
location /wiki {
rewrite ^/wiki(/?)$ /wiki/ break;
}
location /forums {
rewrite ^/forums(/?)$ /forums/ break;
}
location /phpmyadmin {
rewrite ^/phpmyadmin(/?)$ /phpmyadmin/ break;
}
location / {
rewrite ^/([a-z0-9\-\ /\+]+)(/?)$ index.php?tab=$1 break;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
}
}
我看不出规则有什么问题,我是否遗漏了什么?
顺便说一句,我正在使用 Ajenti-V,上述规则已输入到 Ajenti-V 网站的自定义配置面板中。
更新:
看来我当前的重写规则需要路由到它们,php-fpm
因为它们当前被视为静态文件。
我该如何修改上述代码来实现这一点?
答案1
您没有位置块将 php 文件请求转发到处理后端。
为 php 文件添加位置块并使用 nginxfastcgi_模块放入其中,然后将重写转换为 php 文件,从break
到last
。
您可以找到很多有关服务器故障的示例:搜索。
更新:按照评论中的要求修复根位置块。
您的正则表达式已经匹配/
,因此/?
永远不会匹配任何内容,例如/stats/
。您必须设置两个重写规则:
location / {
rewrite "^/(.*)/$" /$1;
rewrite "^/([- +a-z0-9/]+)$" /index.php?tab=$1 last;
[ ... ]
}