如何解决Nginx配置rewrite时报directive“rewrite” is not terminated by “;”

2020年4月27日技巧分享评论83,987字数 1278阅读4分15秒阅读模式

今天想给discuz!SEO一下,做个URL静态化的,这里就需要给Nginx配置rewrite规则。
按照discuz后台提供的rewrite规则,复制到Nginx伪静态规则中,却一直报错。

如何解决Nginx配置rewrite时报directive“rewrite” is not terminated by “;”

经过一番查询才得知,问题出在discuz!X3新的Rewrite规则上。
这是官方给我提供的规则:

Nginx Web Server
rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
rewrite ^([^\.]*)/article-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page={page} last;
rewrite ^([^\.]*)/forum-(\w+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page={page} last;
rewrite ^([^\.]*)/thread-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D{prevpage}&page={page} last;
rewrite ^([^\.]*)/group-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page={page} last;
rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;
rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/archiver/index.php?action=$2&value=$3 last;
rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last;
if (!-e $request_filename) {
	return 404;
}

而因为Nginx配置文件中默认用“{”、“}”来作为配置的段起止标记,而discuz!提供给我的规则中频繁出现{page}字段,导致配置错误。

那么如何解决呢?

很简单,只需要用引号把规则引起来就可以。
比如这段:

rewrite ^([^\.]*)/article-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page={page} last;

就可以修改成:

rewrite ^([^\.]*)/article-([0-9]+)\.html$ "$1/portal.php?mod=view&aid=$2&page={page}" last;

这样就可以顺利完成配置了。

Apache虚拟主机配置文件httpd.conf详解 网页前端

Apache虚拟主机配置文件httpd.conf详解

教程是在本地Windows系统上,使用XAMPP搭建的服务器环境做的示范。 原理都是类似的,不管是Nginx或者Linux服务器,都可以参考这个进行修改。 搭建了服务器环境,上线了网站,却发现默认地址...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定