在nginx上配置Sa-Blog2.0rewrite规则:
- # 只带月份的归档
- rewrite "^/date/([0-9]{6})/?([0-9]+)?/?$" /index.php?action=article&setdate=$1&page=$2 last;
- # 无分类翻页
- rewrite ^/page/([0-9]+)?/?$ /index.php?action=article&page=$1 last;
- # 分类
- rewrite ^/category/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&cid=$1&page=$2 last;
- rewrite ^/category/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&curl=$1&page=$2 last;
- # 归档、高级搜索
- rewrite ^/(archives|search|article|links)/?$ /index.php?action=$1 last;
- # 全部评论、标签列表、引用列表 带分页
- rewrite ^/(comments|tagslist|trackbacks|article)/?([0-9]+)?/?$ /index.php?action=$1&page=$2 last;
- # tags
- rewrite ^/tag/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&item=$1&page=$2 last;
- # 文章
- rewrite ^/archives/([0-9]+)/?([0-9]+)?/?$ /index.php?action=show&id=$1&page=$2 last;
- # RSS
- rewrite ^/rss/([0-9]+)?/?$ /rss.php?cid=$1 last;
- rewrite ^/rss/([^/]+)/?$ /rss.php?url=$1 last;
- # 用户
- rewrite ^/uid/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&uid=$1&page=$2 last;
- rewrite ^/user/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&user=$1&page=$2 last;
- # 地图文件
- rewrite sitemap.xml sitemap.php last;
- # 自定义链接
- rewrite ^(.*)/([0-9a-zA-Z\-\_]+)/?([0-9]+)?/?$ $1/index.php?action=show&alias=$2&page=$3 last;
注:“自定义链接”的rewrite规则参考了《SaBlog-X 2.0伪静态规则虚拟主机 To 独立主机的修改》一文,apache认的规则(.htaccess),nginx居然不认(红色画出的经过修改的)!为了保证搜索引擎的已经木锉的收录效果,只能保持rewrite功能,而且这样的文章名固定链接收录效果很好哦!
在nginx上配置discuz7.0的rewrite规则:
- rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last;
- rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last;
- rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page\%3D$3&page=$2 last;
- rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last;
- rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
遭遇问题:directive "rewrite" is not terminated by ";"
用vi编辑器编辑完nginx.conf文件后保存,在shell下执行命令/usr/local/web/nginx/sbin/nginx -t用以检查nginx.conf配置文件是否正确(假设nginx被编译到/usr/local/web/nginx/)
正确的话:
[root@localhost]# /usr/local/web/nginx/sbin/nginx -t
the configuration file /usr/local/web/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/web/nginx/conf/nginx.conf test is successful
如果出现如下问题:directive "rewrite" is not terminated by ";"
[root@localhost]# /usr/local/web/nginx/sbin/nginx -t
[emerg]: directive "rewrite" is not terminated by ";" in /usr/local/web/nginx/conf/nginx.conf:160
configuration file /usr/local/web/nginx/conf/nginx.conf test failed
处理方法:将重新后的url用双引号引起来!
出错:rewrite ^/date/([0-9]{6})/?([0-9]+)?/?$ /index.php?action=article&setdate=$1&page=$2 last;
正确:rewrite "^/date/([0-9]{6})/?([0-9]+)?/?$" /index.php?action=article&setdate=$1&page=$2 last;
看着那句directive "rewrite" is not terminated by ";"还以为是没;呢!
参考资料:http://developmentcase.com/2009/04/17/nginx-rewrite-and-directive-rewrite-is-not-terminated-by/