Discuz 在启用了版块或者频道的二级域名时,可通过改二级域名访问论坛的url并且不会自动纠正,似乎不太友好。之前用apache 也写了rewrite 规则实现重定向,但现在切换至nginx,需要重新配置一下,但也很简单: 原来的apache rewrite 规则:

RewriteCond %{HTTP_HOST} ^a.domain.com$
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ http://www.domain.com/thread-$1-$2-$3.html [L,R=301]
RewriteRule ^forum.php(.)$ http://www.domain.com/forum.php$1 [L,R=301]
RewriteRule ^archiver(.
)$ http://www.domain.com/archiver$1 [R=301,L]

nginx 规则:

if ($host != ‘www.domian.com')
{
rewrite ^/forum.php(.)$ http://www.domain.com/forum.php$1 permanent;
rewrite ^/forum-(.
)$ http://www.domain.com/forum-$1 permanent;
rewrite ^/thread-(.)$ http://www.domain.com/thread-$1 permanent;
rewrite ^/archiver(.
)$ http://www.domain.com/archiver$1 permanent;
}

因为是多个二级域名的关系,所以将所有$host 不是“www.domain.com” 都rewrite 到“www.domain.com” 下面。将这段规则放到Discuz 生成的规则上面就好了。 看一下效果:

ying@ying-desktop:~/Desktop$ wget http://a.domian.com/thread-18513-1-1.html--2014-04-10 13:28:56– http://a.domain.com/thread-18513-1-1.html
正在解析主机 a.domain.com (a.domain.com)… 114.215.101.226
正在连接 a.domain.com (a.domain.com)|114.215.101.226|:80… 已连接。
已发出 HTTP 请求,正在等待回应… 301 Moved Permanently
位置:http://www.domain.com/thread-18513-1-1.html [跟随至新的 URL]
–2014-04-10 13:28:57– http://www.domain.com/thread-18513-1-1.html
正在解析主机 www.domian.com (www.domain.com)... 114.215.101.226
再次使用存在的到 a.domain.com:80 的连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度: 未指定 [text/html]
正在保存至: “thread-18513-1-1.html”

\[     <=\>                               \] 106,477      100KB/s   用时 1.0s

Comments