Apache2 mod_rewrite

| No Comments | No TrackBacks
论坛里有朋友碰到如下需求:
把search.php?type=let&letter=B 重定向到 let-B.html
我开始想当然的以为:
rewriteRule ^search\.php\?type=let&letter=([A-Z]+)$ let-$1.html [L]
这样就行了,可是大错特错了,mod_rewrite的rewriteRule只对请求里的path做处理,对于?后面的部分,单独处理,有个专门的变量%{QUERY_STRING}负责。

What is matched?

The Pattern will initially be matched against the part of the URL after the hostname and port, and before the query string. If you wish to match against the hostname, port, or query string, use a RewriteCond with the %{HTTP_HOST}, %{SERVER_PORT}, or %{QUERY_STRING} variables respectively.

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html


于是改成:
RewriteCond %{QUERY_STRING} ^type=([A-Za-z]+)&letter=([A-Za-z]+)
RewriteRule ^search.php?$ %1-%2.html [L]

这样之后就成功了。
[more..]

MovableType4.32分页成功

| No Comments | No TrackBacks
分页成功啦,^-^ ^-^. 请查看网站底部的分页导航
  1. 参考官方文档做了分页,点击查看
  2. 参看网友资料做了SEO,点击查看
目前我的Apache Rewrite配置文件 .htaccess的写法如下:

Drupal6.x的模板机制

| No Comments | No TrackBacks

今天用drupal6.25做个东西,在theme这块,考虑到网站前台模板比较复杂,再说也没有针对后台做设计,于是考虑利用自带的garland做administrator theme。设置之后,一切都正常,但是在访问blocks管理时,也就是q=admin/build/block时,发现这个page调用的模板不是garland,这样导致无法利用garland进行block管理。比较奇怪。

于是趁机看了一下drupal的模板机制,在看到theme.inc时,追踪到一个global $custom_theme.原来这个变量是用来控制模板选择的,如果该变量设置了,就是用它,反之,则使用variable_get("default_theme","garland");

 

于是得到一个启发,如果想改变模板,只需要改变这个变量即可。具体实例参考 modules/block/block.admin.inc里第一个函数。

(注:只针对6.X系列,其他版本不知道)

Debian增加man c函数功能

| No Comments | No TrackBacks
#apt-get install manpages-dev

XML::DOM::Parser碰到的一个错误

| No Comments | No TrackBacks
代码片段:
$attr="341F0-Exit 6 to Horse & Jockey Nov H'cap H'dle </>";
$attr=~ s/&/&/g;
$attr=~ s/</</g;
my $xml = '<?xml version="2.0" encoding="UTF-8" ?><results racename="'.$attr.'" />';
my $parser = new XML::DOM::Parser;
my $dom = $parser->parse($xml);
使用XML::DOM::Parser创建xml文件,发现只要$attr里包含& > ,就会产生一个错误, not well-formed (invalid token) at line 1, column 178, byte 178 at /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/XML/Parser.pm line 187 使用替换后,
$attr=~ s/&/&/g;
$attr=~ s/</</g;
不报错了,并且对输出的xml进行解析,也能得到正确的& >
my $simple = XML::Simple->new();
my $data   = $simple->XMLin($twig->sprint);
dump($data);
1 2 3
< Previous 

Pages

February 2010

Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28