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

 

今天接到一个Troubleshooting的Case非常有意思,记录下来。

Continue reading »

 

始自这篇文章《个人域名前不建议加 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]

© 2012 Solo Estoy Suffusion theme by Sayontan Sinha