WordPress的URL静态化其实是通过Apache的URL Rewrite功能实现的伪静态话。在开启这个功能后,blog的根目录会生成一个.htaccess的文件,通过这个文件的一些配置项,来实现URL静态化功能。默认创建的.htaccess内容如下:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

简单来说,就是将访问到非实际存在的文件或者目录的URL全部转向至index.php。index.php接受到这个URL后可以根据这个URL的某些部分来确定要访问的具体页面。

然而启用这个静态化之后,会发现Dremhost后台通过 analog 6.0搭建的访问日志分析工具会访问不到了,会直接跳出Wordpress theme的404页面。原因大概是因为这套系统的入口是http://yourdomain/stats/这样的URL,实际/stats/是在Dreamhost的Apache配置中通过Alias指令添加的虚拟目录,并不存在于站点目录下。然而.htaccess中已经通过URL Rewrite将不存在实际文件或路径的URL直接定向到index.php中去了,因此/stats/这个虚拟目录就无法被访问了。       

解决办法自然是修改URL Rewrite的配置,让其额外对待/stats/这个URL。将.htaccess中的代码增加2行,变成如下即可:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/(stats/|missing\.html|failed_auth\.html) [NC]
RewriteRule . – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

这样修改后/stats还会按照原有Dreamhost的配置访问,同时又不影响Wordpress的静态化功能。

此技巧来自Dreamhost的Wiki,另外还有其他Blog或CMS程序的配置方法,具体可以访问这个页面了解:http://wiki.dreamhost.com/index.php/Mod_rewrite

 

始自这篇文章《个人域名前不建议加 www》,而具体做法见这篇文章《简单去除域名前的 www》。

作者讲了这么长一篇,但对于我来说,真正的原因是因为我自己懒得打www。因为工作性质,经常troubleshooting很多域名解析状况,极度反感那些只对www.domain.tld做解析而domain.tld不做解析的恶劣站长,所以干脆自己也以身作则了,直接不让你们用www访问XD。

而核心代码其实就这么两句:

RewriteCond %{HTTP_HOST} ^www.dawnh.net$ [NC]
RewriteRule ^(.*)$ http://dawnh.net/$1 [R=301,L]

 

本来自己在VPS上玩BLOG的时候是直接对于apache的配置文件做修改来实现的,也就是通过对于传递到PHP的环境变量中的Referer字段的判断来实现,具体可以看这篇文章无良的百度MP3搜索,然而现在在虚拟主机环境下就没有这么随心所欲了。

然而Dreamhost对于.htaccess的支持和mod_rewrite的支持,使得我可以通过URL Rewrite实现同样的功能,具体方法也很简单,就是在.htaccess中写入如下语句块

RewriteEngine On

RewriteCond %{HTTP_REFERER} mp3\.baidu\.com [NC,OR]
RewriteCond %{HTTP_REFERER} box\.zhangmen\.baidu\.com [NC,OR]
RewriteCond %{HTTP_REFERER} 220\.181\.27\.54 [NC,OR]
RewriteCond %{HTTP_REFERER} m\?ct=
RewriteRule .* – [F]

前面两句是禁止mp3.baidu.com和box.zhangmen.baidu.com(不知道这个域名是干什么用的,然而从日志来看这个域名爬走的流量一点不比mp3.baidu.com小)这两个域名Referer过来。
第三句是禁止这个IP的Referer,这个也是mp3.baidu.com的IP。
第四句是禁止Referer为类似“http://xxxx.com/m?ct=XXXXXX”这种形式,这是为了避免mp3.baidu.com以其他域名或IP过来爬,从我前几个月的日志来看,还是有不少IP是这样爬过来的,真不知道mp3.baidu.com的爬虫还有多少版本。

© 2012 Solo Estoy Suffusion theme by Sayontan Sinha