WP-T-WAP URL静态化

WP-T-WAP Version 1.9 Update:2008.06.26 发现一个错误.对 paged=?分页参数只是重写为 根目录的分页.而这个参数实际上还控制着category和tag页的分页.因此需要增加两句RewriteRule代码,对_get_pagenum_link函数修改也要重写. 文中错误之处已经更改 WP-T-WAP是很好的Wordpress WAP插件.已经进入WP官方插件库. 安装WP-T-WAP后,可以通过http://yourBlogDomain.com/wap/地址WAP浏览/管理你的Blog. 如果绑定域名,则可以通过wap.yourBlogDomain.com 访问。默认生成的内部链接地址是index.php?p= 形式。 通过修改,可以使其链接URL静态化   以偶的Blog为例,WP安装在 oogami.name 绑定wap.domain.com 域名到WP目录下wap文件夹 编辑wap文件夹下.htaccess文件,加入下面代码: RewriteEngine On RewriteBase / RewriteRule ^post/([0-9]+)$ index.php?p=$1 [L] RewriteRule ^comment/([0-9]+)$ comments.php?p=$1 [L] RewriteRule ^category/([0-9]+)$ index.php?cat=$1 [L] RewriteRule ^tag/(.*)$ index.php?tag=$1 [L] RewriteRule ^page/([0-9]+)$ index.php?paged=$1 [L] RewriteRule ^category/(.*)/page/([0-9]+)$ index.php?cat=$1&paged=$2 RewriteRule ^tag/(.*)/page/([0-9]+)$ index.php?tag=$1&paged=$2 然后就是修改插件文件,修改之处比较多 进入 WP安装目录下 /wp-content/plugins/wp-t-wap […]

Continue reading

中文(zh)语言下的Mediawiki URL静态化问题

[未解决] 捣鼓mediawiki.发现一个繁简共存下的伪静态化问题。通常mediawiki的URL静态化方法是在localsetting.php中设置 $wgArticlePath=”/wiki/$1″,然后在.htaccess中加入rewrite代码。(当然如果是独立服务器可以直接改httpd.conf)。然而这种方法只对安装时选择语言为英文的mediawiki有效;如果安装时设置语言为‘zh-中文’,那么即使这样修改,游客访问时,链接的地址仍然是“index?title=$1&variant=zh-cn”形式。因为‘zh’是多种中文形式共存,除非已登录用户,mediawiki无法确定/wiki/$1形式网址应该显示哪种语言。如果安装时设置语言为‘zh-cn简体中文’,则可以实现URL静态化;但这时页面上根本不会出现繁简转换的相关按钮,即使手工输入“index?title=$1&variant=zh-hk”地址也无效。中文维基没有解决这个问题,它的默认URL地址根本没有静态化!。在众多wiki网站里,貌似只有天下维客解决了这个问题;它的默认链接地址是/wiki/$1,但可以通过页面上index.php&title=… &variant=zh-tw 链接切换到其他中文语言。 偶不知道这是如何实现的。天下维客的mediawiki专题资料里也没提到这个问题。

Continue reading

为Aksimet添加一个白名单(Whitelist)

可岛可薇同学在偶Blog留言很不顺利;几乎每次都被Aksimet判定为Spam … 对于偶们这些使用国外空间的Wordpresser, Aksimet是最佳的垃圾评论拦截工具,由于是国外虚拟主机,Aksimet可以连接到服务器(不会受到GFW阻碍),Spam识别率很高.(偶Blog自去年3月创建共拦截了1500个Spam) Aksimet不得不用,但索可岛可薇同学无法留言问题又必须解决.我考虑为Aksimet添加一个白名单(Whitelist).研究了一下,如下 WordPress后台插件编辑器,打开Aksimet插件目录下akismet.php文件. 首先在php文件最上面创建一个白名单: $comments_mail_whitelist = array(“[email protected]”,”[email protected]”); 为了省事,创建一个数组而已. 存储评论者的Email 看一下这个php文件,关键这句: add_action(‘preprocess_comment’, ‘akismet_auto_check_comment’, 1); 添加了一个preprocess_comment的钩子,用于提交评论时进行审核. 遂定位到 akismet_auto_check_comment 函数 function akismet_auto_check_comment( $comment ) { $comment[‘user_ip’] = preg_replace( ‘/[^0-9., ]/’, ”, $_SERVER[‘REMOTE_ADDR’] ); $comment[‘user_agent’] = $_SERVER[‘HTTP_USER_AGENT’]; $comment[‘referrer’] = $_SERVER[‘HTTP_REFERER’]; $comment[‘blog’] = get_option(‘home’); $ignore = array( ‘HTTP_COOKIE’ ); foreach ( $_SERVER as $key => $value ) […]

Continue reading

WordPress Search Permalink

WP的Permalink(永久链接)做的相当完善,我见过所有php程序最好的 1.高度可自定义.单篇文章页,日期存档,分类存档,Tag存档页的永久链接形式都可以自定义. 2.根据Host自动重定向.例如把www.abc.com/$1 重定向到abc.com/$1 3.末尾自动去除或添加”/” .例如你永久链接是 /%post_id%形式 .当有人访问 your-blog.com/34/时会被重定向到 your-blog.com/34 骨头里挑刺的话,还是有不足.就是搜索结果页的永久链接. WordPress默认通过表单提交的搜索,结果页地址是 http://blog.name/?s=keyword 形式 . 但实际上WP已经内置了Search permalink .通过直接在地址栏输入http://blog.name/search/keyword ,也能访问搜索结果 .其中 “search”这个字段由 wp-includes/rewrite.php 中的 $search_base变量定义,可自行修改. 通过Search Permalink这个插件,可以使默认表单提交的搜索地址变成 http://blog.name/search/keyword/ 形式.这个插件很简单,客户端使用JS监控表单submit,服务器端重定向/?s=keyword地址到 /search/keywords/形式. 现在我想做的是 1.把安装Search Permalink后的搜索页面地址由 /search/keyword/ 变为 /search/keyword 形式 2.当有人输入/search/keyword/时,自动重定向到/search/keyword (去掉末尾 /) 前者很容易做到,事实上只要修改Search permalink插件的两个地方即可.但是我始终找不到如何做到第二点.事实上这是WordPress内部设置,与Search Permalink插件无关.即无论你永久链接设置如何.访问 http://your-blog.com/search/keyword 和 http://your-blog.com/search/keyword/都会返回 Http 200 OK.而不会发生301重定向. SEO的首要原则是URL唯一化.网站的任何页面在正式发布时只能有一个标准URL,其他所有别名地址都应该被重定向到标准URL.我仔细看了 wp-includes/rewrite.php 文件,没有找到可以解决这个问题的地方.最后,不得不使用.htaccess大神 : <IfModule mod_rewrite.c> RewriteEngine […]

Continue reading

CSS & Javascript学习记录

一些杂记. li列表默认display:block .块级元素,每个后换行.若使列表不换行.可以给li加 display:inline ; 或者加 float属性使其脱离文档流.推荐后者特别是在li里面是a 链接时候,可能需要把a元素设为display:block.这样如果把li设为display:inline后仍然会换行 貌似还有一种是给li加 white-space: nowrap .也可以不换行. CSS配合JS的下拉菜单.经典布局是 <ul> <li><a>…</a><ul><li></li><li></li>….</ul></li> <li><a>…</a><ul><li></li><li></li>….</ul></li> </ul> 即ul里面的li套ul,存放隐藏区块(Visibility: hidden) .这个ul块必须采用绝对定位(position: absolute) position:absolute如果没有配合top left bottom right ,就相对父标签定位 Javascript实现快捷键代码: document.onkeypress=function hotkey(e) { var code= String.fromCharCode(e.which); switch( code) { case ‘s’ : ….. break; ……….. default: break; } }

Continue reading

Ajax入门学习笔记

今天下午,随便翻了几本Ajax的书籍 .包括Lee Babin的 Beginning Ajax with PHP ; Ajax Hack 等。算是晓得Ajax是啥东西了。 Ajax依赖于Javascript和XML,实现异步的数据传输,在Web客户端的表现就是页面无需刷新。这玩意最早是、Microsoft提出来的,貌似现在还没有国际标准,但所有主流浏览器都支持。Ajax核心是Javascript的 windows.XMLHttpRequest对象 (IE6以下版本是ActiveXObject) 要创建一个 Ajax实例,只需创建 XMLHttpRequest对象即可。但是IE6及以下版本必须用完全不同的ActiveXObject方式创建。所幸的是除了初始化外两种方式创建的对象属性和方法几乎完全相同 .而且 IE7也开始支持标准XMLHttpRequest 对象.但现在貌似IE6还有人用..   XMLHttpRequest对象使用极其简单,基本的用法如下: function ajax(uri,id) { var content=document.getElementById(id); xmlhttp.open(“GET”,uri); //xmlhttp是创建的XMLHttpRequest对象 xmlhttp.onreadystatechange=function() { if( xmlhttp.readystate=4 && xmlhttp.status=200) { content.innerHTML=xmlhttp.responseText; } xmlhttp.send(null); }   所有复杂的Ajax运用,基本原理都是这样 .XMLHttprequest的 open方法向服务器提交请求,GET是请求方式,也可以是POST.uri是目标文件URL,例如”abc.htm” ,” abc.php&a=1″之类,也可以是绝对路径. XMLHttprequest 的 readystate有四种状态: 0,1,2,3,4 分别表示 初始化,载入中,正在载入,交互中和完成. 用onreadystatechange监控这一值改变,当完成后 如果 服务器返回状态码是200 […]

Continue reading

DIV +CSS区块自适应高度

做主题遇到这个问题.假设下面区块: 经典的二栏+Footer栏布局.content /sidebar区块分别设置为 向左/右float即可.如果三列则两列浮左,一列浮右. 通常这样没有问题.但如果给区块加上background-color:(背景颜色),例如: 默认背景(page)白色 content 列,背景红色 sidebar列: 背景黑色. 通常情况下,content 和sidebar的高度块不会相等,那么结果就会出现其中一列背景正常,而另一列上面是背景色,下面是白色!. 这个貌似是DOV+CSS下经典的自适应高度问题.我尝试给 sidebar /content列加上 height: 100% ;和 min-height:100%,均无效. (不知道原因,手册上说min-height百分比单位为参照父元素宽度) . 有看到一种方法: page块背景色:设为黑色 content 列,背景 红色 sidebar列: 背景 黑色.. 但这样只有在Sidebar列高度超过 content列时才有效!!,如果反过来呢? 我从现在使用的主题里找到了解决方法 #page { background: url(“images/back.jpg”) repeat-y top right; } 把 back.jpg这个图片颜色设为Sidebar背景色,宽度设为和Sidebar宽度相等(sidebar有margin的话相应减去),从右上方开始填充!,那么就正好覆盖Sidebar块所在的整个列. 这应该是最佳方案了

Continue reading

自制WordPress主题 La-Lune 测试

本人对CSS一窍不通,但还是决定自己做一款WP主题…因为用别人的Theme终究不爽,看到别人和偶用一样主题更加不爽 …..要想保证使用主题唯一性,只有自己做一个. 主题名字叫La lune ,之所以叫这个名字是因为其配色参考了一款同名Discuz模板. 偶CSS很烂…所以基本上没用啥花样.参考WP默认模板框架,二栏,使用一些Icon装饰.一些地方设计参考了许多WP主题… 昨天做了一天时间,大致上做好了.现在放在本人的英文博客上测试并完善. 配色还得改改,总觉得太淡 PS:测试主题暂时不能留言,因为偶还没做 comments.php – –

Continue reading

2007年12月日语考试证书在线制作程序

这是偶今天无聊写的东西.php实现 Version 1.0 纯属娱乐,技术含量是没有滴.. (要不怎么说我无聊呢….) 在线演示地址: http://test.sakura-paris.org/jp/1/jpdiplema.htm 本程序根据用户输入的姓名,出生日期,考试级别和准考证号,在线生成2007年12月日本语等级考试的证书图片.证书样图来源于咖啡日语论坛杜亮提供 具体的过程是 表单提交数据 -> php程序接受数据 -> 用 GD库的 imagettftext函数把文字写入证书样图的对应位置 -> 浏览器输出生成图片(imagejpeg函数).   说明: 1.为了省事,服务器端没有对用户输入的内容做任何过滤 ,本程序并没有任何SQL查询/文件上传等代码,所以不会造成安全问题. 而如果php程序涉及SQL查询/文件上传等过程,则必须对从客户端接受数据进行严格的过滤,通常过滤流程如下: 首先判断是否为空 : if(!$_GET[‘variable’]) ….. -> 判断字符串长度是否超标: if (length($_GET[‘variable’]) >10 ….. ->使用正则表达式对数据格式进行严格审查: if(!ereg(“^[a-zA-Z0-9]*$”,$_GET[‘variable’]) …. (这个正则式子将确保客户端传来的数据只含有英文字母和数字,不含有任何 ‘ ” ; 等危险的特殊符号) WEB开发的首要原则是:所有客户端传来的数据都是不可信赖的 2.imagettftext函数要求指定TrueType字体文件,而这个与平台相关,比较头疼.所以我干脆上传了一个ARIAL.TTF文件到程序目录下 .直接用这个Arial字体 3.请不要输入中文字符,否则出错 (因为使用的Arial字体没有中文字符) 4.整个过程最头疼的就是确定写入文字在样图上像素的位置,这个偶是本地用Photoshop的标尺+windows计算器手工计算出来的…汗…. 5.需要GD2库. (GD1不行,因为两个版本字体大小不同) 最终的东西有下面几个文件(位于同一文件夹下) jp.jpg —– >用于生成证书的样图(移除了文字) original.jpg ——>真实的原始证书图片(咖啡日语论坛杜亮提供) […]

Continue reading

WordPress2.5 发布

7个小时以前,全球最著名的Blog程序WordPress正式发布了2.5版本 .同时WP官网改版,新版首页类似于WP2.5后台样式. 这是WP自2.0版本以来最重大的版本更新.在Blog界可以说万众瞩目.本Blog将立刻更新到2.5版本.升级期间本Blog可能暂时无法访问.请稍后 PS: Dreamhost 的 One Click Install/Update刚刚也升级到了 WP 2.5 .所以可以轻松一键升级Blog到WordPress 2.5版,但还需要做好备份. Update: 08:02 升级文件和数据库完成,没有遇到任何问题,Blog显示正常.正在熟悉新版后台.稍后将修改Theme Update: 关于新版附带的插件自动升级功能 ,对托管在WordPress官方插件库插件可以实现后台一键升级,非常方便!,如下图 . (我没有修改任何设置,直接尝试用其升级插件成功) .     有了这个就不用怕 All in One SEO 这种一天到晚升级的插件了 – – .毕竟每次 手工升级插件要先 reactivate 插件 -> ,删除旧插件文件 -> wget 下来新版插件 -> unzip解压缩 -> 后台激活 ,还是很麻烦滴 (要是没有SSH,用FTP更麻烦)   我在使用这个功能时发现, 要能够通过 WordPress 2.5 后台自动升级插件,除了插件必须托管在官方插件库外 ,插件压缩包文件必须符合规范 ,即解压缩后 […]

Continue reading