Nginx自定义WordPress url伪静态规则

作者 FarLee 2012年3月17日 21:11:02   ‖浏览(9,069)

因国外ip线路遭受的待遇越来越特殊,将WordPress博客从国外迁移到了国内线路,幸好域名以前曾经有备案,所以迁移很顺利。虚拟主机商是杭州中电云集,提交备案号等信息后申请域名加入白名单。然后第二天空间商基本就审核通过了,为你的域名绑定到主机空间上。审核过程中无须先将ip指向新的国内主机商,因此不会造成网站一段时间内无法访问,完全平滑迁移。

值得一提的是中电云集使用Nginx服务器,双线linux 主机一年也比较优惠,后台使用也很方便,唯一比较纠结的后台没有在线编辑文件的功能。

Nginx自定义伪静态和更常用的apache主机有些不一样,伪静态设置中程序选择wordpress 后保存,也可选择自定义以满足特殊的定制要求,如

rewrite ^/\+$ https://plus.google.com/116186365797322490378 permanent;
if (!-e $request_filename) {
rewrite ^/t/(.+)$ /t/index.php?q=$1 last;
rewrite ^/en/(.+)$ /en/index.php?q=$1 last;
rewrite ^/(.+)$ /index.php?q=$1 last;
}
if ($host != ‘farlee.info’ ) {
rewrite ^/(.*)$ http://h.farll.com/$1 permanent;
}

第一条为“http://h.farll.com/+” 301跳转到google plus 页面,这条自定义一定要写在下面这条wordpress 程序设置permalinks 的伪静态规则之前。
第二条是大家熟悉的 wordpress 特定的Nginx伪静态重写规则。如果没有特殊要求,wordpress 用这条if (!-e $request_filename) {rewrite ^/(.+)$ /index.php?q=$1 last;}够了,另外rewrite ^/t/(.+)$ /t/index.php?q=$1 last;rewrite ^/en/(.+)$ /en/index.php?q=$1 last; 这两条规则是为二级目录安装的wordpress博客设置的,要放在主目录的前面。
第三条应用也很多,比如很多人喜欢把www域名301重定向跳转到不带www的域名,或者相反。或者喜欢把空间商送的三级域名也跳转到自己的主域名。

Nginx的以上规则必须在nginx服务器的配置文件中写,而Apache则可以在网站各级目录的 .htaccess 文件中写rewrite规则。对应的虚拟主机 apache 重写规则如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.farlee.info$ [NC]
RewriteRule ^(.*)$ http://h.farll.com/$1 [L,R=301]

# RewriteEngine on
# RewriteBase /wp-content/uploads/
# RewriteCond %{HTTP_REFERER} !^$ [NC]
# RewriteCond %{HTTP_REFERER} !farlee.info [NC]
# RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]
# RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
# RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
# RewriteCond %{HTTP_REFERER} !google.com [NC]
# RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
# RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
# RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
# RewriteRule .*.(gif|jpg|png)$ http://h.farll.com/wp-content/not.jpg [R,NC,L]

# For Google+
Redirect permanent /+ https://plus.google.com/116186365797322490378

# BEGIN WPSuperCache
# END WPSuperCache

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

上面还有一段是针对特定网站进行防盗链的设置规则,因虚拟主机空间商后台可以设置是否开启,不用自己再定制Nginx 重写规则。


“Nginx自定义WordPress url伪静态规则”文章评论(4)

  1. 自定义nginx伪静态,点击保存后再打开时,rewrite ^/\+$ https://plus.google.com/116186365797322490378 permanent; 会把rewrite ^/\+$ 中的反斜杠自动去掉,这时编辑其他后点击保存,首页也会跳转。所以再次编辑保存的时候别忘了再加上反斜杠\。

  2. include 可以外部引用,类似.htaccess 效果

    • 谢谢提醒,补充下:在Nginx配置文件中用可以用include 外部引用网站目录中的名为.htaccess的文件,.htaccess文件中仍然必须是符合Nginx语法的重写规则。

Trackbacks/Pingbacks

  1. 问:备案也有潜规则吗 – 远方博客

来说兩句