今天想给discuz!SEO一下,做个URL静态化的,这里就需要给Nginx配置rewrite规则。
按照discuz后台提供的rewrite规则,复制到Nginx伪静态规则中,却一直报错。
经过一番查询才得知,问题出在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;
这样就可以顺利完成配置了。