Archive for 二月, 2010

30个优秀Wordpress技巧:http://www.kenengba.com/post/464.html

10个Wordpress增强型编辑器:http://www.kenengba.com/post/282.html

1、类别下拉菜单

分类太多,但又想展示全部展示出来,不妨考虑用下拉菜单的方式展示,和可能吧菜单栏上的“更多”有点类似。

2、显示作者Gravatar头像

有些博客是多作者的,如果你觉得单是一个名字不能明显地区分作者,不妨考虑将头像也加上。

3、自定义首页

用一个自定义的页面替换默认的/index.php首页。

4、显示文章作者信息

还是多作者博客可能需要使用的技巧,在每篇文章中都显示该篇文章作者的信息。

5、显示某一类别的最新评论

只显示某类别的评论,而不是全部。

6、高亮作者评论

在评论里,用特别的颜色将文章作者的评论高亮起来。

7、文章缩略图

为每篇文章创建一个缩略图,让你的文章看起来更有趣。

8、分类图片

用图片替代分类的文字。

9、阅读器图片格式优化

有时在阅读器里文字和图片会出现下面的情况:

如果出现了,你需要学学怎样去解决。

10、日期按钮:

制作一个小巧的日记按钮。

11、某篇文章隐藏广告

某些文章或许你不想显示广告,比如写关于腾讯的,会出现大量所谓的“6位QQ号”广告

12、文章置顶

给某篇、或某些文章设置置顶。

13、自定义404错误网页

或许你看了15个很有创意的404页面后很想自己做一个刚有创意的,试试吧!

14、将Wordpress打造成成员目录

如下图:

15、加速Wordpress的4个基本方法

觉得你的博客加载速度很慢而导致博客冷清?尝试用精简代码等方法加速WP吧。

16、创建博客手机版

为WP博客创建一个手机版本

17、新窗口打开链接

大多数默认情况下WP文章里的链接是在原窗口打开的,你可以尝试更改为在新窗口打开。

18、将WP打造成CMS

将WP打造成一个杂志型网站。

19、制作翻页效果

在博客右上角(或其它地方)制作翻页效果,然后放点即时小时也不错。

20、将评论与引用分开

这个很有必要,有些博客评论区域里评论和引用混乱在一起,看起来不是很友好。

21、WordPress增强编辑器

默认的WP编辑器非常简陋,不妨考虑换一个,比如FCKeditor。

22、侧栏登录

将登录框搬到侧栏中去。

23、图片防盗链

文章被转载时很多情况下图片都会被复制粘贴去,如果你是将图片上传到自己的空间,而你的服务器又没有安装防盗链软件,你可能需要使用这个防盗链插件。

24、在第一篇文章放置广告

有调查表明,浏览者看第一篇文章时点广告的几率最大。你可以设置广告只出现在第一篇文章,后面的文章就不出现,如果你放置了太多广告影响浏览体验的话。

25、自定义登录界面

登录页面虽然只是自己看的,但你也可以将其弄得漂亮点,登录后或许能有个好心情,写篇好文章。

26、将优秀的文章秀出来

酒香也怕巷子深,好的文章不妨拿出来给别人看。

27、展示Twitter消息

在博客里展示Twitter消息。(不是简单的嵌入twitter提供的代码)

28、字数统计

你应该需要知道一篇文章有多长的。

29、某些内容只在Feed提供

你可以用这个插件,在Feed里提供一些特别的内容,以鼓励订阅。

30、某一分类不出现在Feed里(中文

有时我们不希望所有的分类都输出到Feed里。

WordPress之所以优秀不在于其本身,而在于无数的插件开发者和性能优化人员。使用过Wordpress的人都知道,WP本身的编辑器极其简陋,就连简单的表格编辑也没有,可能吧这篇文章将介绍一些免费的增强Wordpress编辑器功能的插件和一些离线Wordpress文章编辑器。

增强编辑器插件:

1、TinyMCE Advanced

这个插件增强连WP的原始编辑器,增加了表格,查找与替换,表情,插入媒体等等。

可能吧 www.kenengba.com

2、WP Super Edit

和TinyMCE Advanced差不多,没有查找替换功能。但它可以做一些本来需要修改代码才可以完成的事。

3、Monsters Editor for WP Super Edit

这个插件会让你想起微软的Word 2007这样的形容足够了吧?

可能吧 www.kenengba.com

4、FCKEditor

老牌的富文本编辑器了,功能超级强大,很多blog程序都有这个编辑器,包括我以前使用的zblog。

5、WYSIWYG Plugin for WordPress

这个插件能让你加强对图片的控制和操作。

6、Advanced TinyMCE Editor

看名字可能会以为是和第一个是一样的,而事实上,功能稍微强大了一点。

离线编辑器:

可能吧 www.kenengba.com

离线编辑器有更快的反应速度,并且还可以节省你的网费。

1、BlogDesk

功能并不强大,可以说是和WP默认的编辑器功能一样。

2、Qumana

Qumana拥有漂亮的界面和丰富的功能,推荐使用。

可能吧 www.kenengba.com

3、Windows Live Writer

这个不用介绍了吧?除了可以用在微软的live space之外还可以用在Wordpress等多个博客系统。

4、Microsoft Word 2007

上面的都不喜欢?功能都不够强大,也许这时你会想用微软的Word 2007了。Word 2007集成了博客发布功能。

http://www.szjt.org/bgs/czfs/chang_zhen/changzhen_1-04.htm

广义言之,指清净身心,而慎防身心之懈怠;狭义而言,则指八关斋戒,或特指过午不食之戒法。

盖凡有持斋,则必有戒,故斋戒二字自古并称。上文所述即为斋戒之广义含义,狭义言之,即指中阿含卷五十五持斋经中所谓‘圣八支斋’者,亦即今日教内习称之八关斋戒(又称八关斋、八戒),此一戒律乃专供优婆塞、优婆夷等在家二众于一日一夜受持出家之戒。
其内容于诸经所举颇有异说,然通常所谓之八戒者列举如下:
1.离杀生。
2.离不与取,‘不与取’系指未经他人允诺而自行取用他人之物,亦即偷盗之意。
3.离非梵行,梵行即清净不淫之行。
4.离虚诳语,举凡两舌、恶口、妄言、绮语等均属之。
5.离饮诸酒,酒能乱性昏智,妨碍修行,故须远离。
6.离眠坐高广严丽床座,不坐卧于一尺六寸以上或宽大华丽之床座,以免养尊处优,习于放逸。
7.离涂饰香鬘及歌舞观听,即不以香花、花鬘佩戴于身,不以香油等涂抹于身,不作歌舞倡伎,亦不无故前往观听。
8.离食非时食,即上记所谓之不过中食,此系八戒中之最重要者。
此外,菩萨善戒经亦列举:不杀、不盗、不淫、不妄语、不自赞毁他、不悭惜财法、不嗔受悔、不谤乱正法等八种。大智度论卷十三则举出:不恼害、不劫盗、不邪淫、不妄语、不两舌、不恶语、不绮语、不饮酒等八者。诸经中举出多种有关持守八斋戒之功德者,例如中阿含卷五十五持斋经、增一阿含经卷十六均谓,受持者于命终后必生于欲界六天,不堕三途八难;优婆塞戒经卷五之八戒斋品亦云,可除去五逆罪,并灭除其余一切之罪障。

对于八戒的解释:

1.不杀生戒;上至诸佛圣贤、师僧父母,下至鹃飞蠕动、微细昆虫,只有是存活生命,都不可自己杀害,指使他人杀害,内心也不可起喜好杀害之意;而且要劝人莫杀。

2.不偷盗戒;上自金银贵重物品,下至一针一草,不可没有给与而取。

3.不淫戒;制止非礼的邪淫,即使夫妻也不得有淫。这跟五戒中的不邪淫有所区别,五戒的不邪淫是可以夫妻间的正淫;而此不可一切的淫乱。

4.不妄语戒;禁止说谎话,摄持]不妄语、不两[舌、不恶口、不绮语等口四善业戒。

5.不饮酒戒;禁止饮酒,包括啤酒、葡萄酒等一切酒类。

6.不涂脂粉、香水,不戴花鬘,不穿华丽服装,不观玩歌舞唱妓秽乐戒;不可在脸上涂脂粉,不可在身上涂香水,不可戴花环金银饰品,应穿朴素服装,不往歌舞厅、妓乐场所等。

7.不睡卧高大床褥戒;不可躺卧高大宽广且华丽的床铺。

8.不非时食;就是过了中午午时之后就不能再进食食物。

敬附诸圣诞辰日期(均为中国农历)

1、正月初一日:天腊之辰,为弥勒菩萨圣诞,此日宜立下敬信佛教的愿。

2、正月初八日:五殿阎罗天子神诞,要立下忏悔的愿。

3、正月初九日:玉皇大帝神诞,宜立下忠心报国的愿。

4、二月初一日:一殿秦广王神诞。

5、二月初二日:土地正神诞辰,宜立下永远不敢诽谤三宝(佛宝、法宝、僧宝)的愿。

6、二月初八日:三殿宋帝王神诞。

7、二月十八日:四殿五官王神诞。

8、二月一十九日:观世音菩萨降生圣诞,宜立下劝善、戒杀、放生的大愿。

9、三月初一日:二殿楚江王神诞。

10、三月初八日:六殿卞城王神诞。

11、三月二十七日:七殿泰山王神诞。

12、四月初一日:八殿都市王神诞。

13、四月初八日:释迦牟尼佛降生之辰,宜立下众善奉行,诸恶莫做的愿。

14、四月十五日:九殿平等王神诞,不宜斩草伐木。

15、四月十七日:十殿转轮王神诞。

16、五月十一日:天下都城隍神诞,宜立劝人勿到神庙发咒的愿。

17、六月十九日:观世音菩萨成道之辰,宜立劝人诵咒念佛的愿。

18、七月三十日:幽冥教主地藏王菩萨圣诞,宜立资助超脱十方一切孤魂的愿。

19、八月初三日:灶君神诞,宜立不在厨房灶旁宰杀生灵和哭啼、嬉笑、打骂及不抛弃剩饭剩菜和不蒸株鳖、鳝等野生动物的愿。

20、九月初九日:丰都大帝神诞,宜立宣扬大帝晓谕世人改过向善的愿。

21、九月十三日:孟婆尊神诞辰,宜立劝人吃素、念佛的愿。

22、十二月初八日:释迦如来成佛之辰,宜立布施救济急难愿。

23、十二月二十四日:各家各户司命灶神上奏天庭之辰,宜立小心火烛及宁可人害我、不可我害人的愿。

每月初一、十五日,多逢佛菩萨及诸圣贤神仙诞辰,都应斋戒,行善。

1、自增字段归零

zz from: http://www.cnblogs.com/xiaoao808/archive/2008/05/25/1206970.html

如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数

truncate table 表名

方法二:   dbcc checkident (‘table_name’, reseed, new_reseed_value)   当前值设置为   new_reseed_value。如果自创建表后没有将行插入该表,则在执行   DBCC   CHECKIDENT   后插入的第一行将使用   new_reseed_value   作为标识。否则,下一个插入的行将使用   new_reseed_value   +   1。如果   new_reseed_value   的值小于标识列中的最大值,以后引用该表时将产生   2627   号错误信息。
方法二 不会清空已有数据,操作比较灵活,不仅可以将自增值归零,也适用于删除大量连续行后,重新设置自增值并插入新的数据;或从新的值开始,当然不能和已有的冲突。

ps:方法二在我的mysql上总是报错

mysql> select version();
+————-+
| version()   |
+————-+
| 5.0.51a-log |
+————-+
1 row in set (0.00 sec)
mysql> DBCC   CHECKIDENT (urls, reseed, 1);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘DBCC   CHECKIDENT (urls, reseed, 1)’ at line 1
2、复制表结构
create table new_table_name select * from old_table_name  — 复制old_table_name 到 new_table_name,包括表结构和内容
create table new_table_name select * from old_table_name  where 1 = 1 — 复制old_table_name 到 new_table_name,包括表结构,但不包括内容

zz from : http://news.cnblogs.com/n/42029/

地址栏快捷方式

在地址栏,进行下列操作之一:

键入搜索字词 使用默认搜索引擎进行搜索

键入网址中”www.”和 “.com”之间的部分,然后按 Ctrl+Enter 为您在地址栏中输入的内容添加”www.”和”.com”,然后打开网址

键入搜索引擎关键字或网址,按 Tab 键,然后键入搜索字词 使用与关键字或网址相关联的搜索引擎进行搜索 如果谷歌浏览器可以识别您要使用的搜索引擎,将会提示您按 Tab 键。

F6 或 Ctrl+L 突出显示网址区域中的内容

输入网址,然后按 Alt+Enter 在新标签页中打开网址

窗口和标签页快捷方式

Ctrl+N 打开新窗口

按住 Ctrl‎ 键,然后点击链接 在新标签页中打开链接

按住 Shift 键,然后点击链接 在新窗口中打开链接

Alt+F4 关闭当前窗口

Ctrl+T 打开新标签页

Ctrl+Shift+T 重新打开上次关闭的标签页。 谷歌浏览器可记住您关闭的最后 10 个标签页

将链接拖动到标签页内 在指定标签页中打开链接

将链接拖动到两个标签页之间 在新标签页横条上的指定位置打开链接

Ctrl+1 到 Ctrl+8 切换到指定位置编号的标签页。 您按下的数字代表标签页横条上的位置。

Ctrl+9 切换到最后一个标签页

Ctrl+Tab 切换到下一个标签页

Ctrl+Shift+Tab 切换到上一个标签页

Ctrl+W 或 Ctrl+F4 关闭当前标签页或弹出式窗口

打开谷歌浏览器功能的快捷方式

Ctrl+B 打开和关闭书签栏

Ctrl+H 查看历史记录页

Ctrl+J 查看下载页

Shift+Escape 查看任务管理器

Shift+Alt+T 将键盘焦点设置在谷歌浏览器工具栏上。 使用键盘上的向右和向左箭头,导航至工具栏的不同区域。

网页快捷方式

Ctrl+P 打印当前页

F5 重新加载当前页

Ctrl+F5 或 Shift+F5 重新加载当前页,但忽略缓存内容

按住 Alt 键,然后点击链接 下载链接

Ctrl+F 打开”在网页上查找”框

Ctrl+G 或 F3 查找与您在”在网页上查找”框中输入的内容相匹配的下一个匹配项

Ctrl+Shift+G 或 Shift+F3 查找与您在”在网页上查找”框中输入的内容相匹配的上一个匹配项

Ctrl+U 查看源代码

将链接拖动到书签栏 将链接加入书签

Ctrl+D 将当前网页加入书签

Ctrl++ 放大文字

Ctrl+- 缩小文字

Ctrl+0 还原到正常文字大小

文字快捷方式

突出显示内容,然后按 Ctrl+C 将内容复制到剪贴板

将光标置于文字字段中,然后按 Ctrl+V 从剪贴板粘贴当前内容

将光标置于文字字段中,然后按 Ctrl+Shift+V 从剪贴板粘贴当前内容的纯文字部分

突出显示文字字段的内容,然后按 Ctrl+X 删除内容

当父类是一个抽象类,即它具备至少一个virtual函数的时候,如果没有virtual的析构函数,gcc在打开-Wall的时候,会给出警告:

abstract.cc:5: 警告:‘class Base’ 有虚函数却没有虚析构函数
abstract.cc:10: 警告:‘class Child’ 有虚函数却没有虚析构函数
为了规避这个警告,可以给父类增加一个virtual的析构函数。那么这个析构函数到底有什么用处呢?
下面的代码的运行结果为:
child call
child call
Child destroy
Base destroy
Child destroy
Base destroy
可以看到,子类析构的时候,编译器会自动调用父类的析构函数。

 C++ |  copy code |? 
01
02
  #include <iostream>
03
 
04
  using namespace std;
05
 
06
  class Base {
07
      public:
08
          virtual void call() = 0;
09
          virtual ~Base(){
10
              cout << "Base destroy" << endl;
11
          }
12
  };
13
 
14
  class Child : public Base{
15
      public:
16
          void call(){
17
              cout << "child call" << endl;
18
          }
19
          ~Child(){
20
              cout << "Child destroy" << endl;
21
          }
22
  };
23
 
24
  int main()
25
  {
26
      Child c;
27
      c.call();
28
 
29
      Base* b = new Child();
30
      b->call();
31
      delete b;
32
 
33
      return 0;
34
  }
35

但是,如果把Base析构函数的virtual去掉,gcc仍然会给出警告,运行结果:

child call

child call

Base destroy

Child destroy

Base destroy

这代表着,当显示操作子类Child的时候,会先调用Child的析构函数,然后编译器自动调用父类Base的析构函数。但是,当使用父类的指针操作Child的时候,就仅调用了父类Base的析构函数!

所以,《C++大学教程》里有这样的两段话:

1、如果您打算让别人从您的类中派生子类,并希望能够通过父类指针多态的删除它们,就把父类的析构函数定义为虚函数。

2、如果您想创建一个父类,可以被派生,但是不要多态的删除它们,那么就把父类的析构函数定义为protected的非虚函数。这样,子类仍然可以隐式调用父类的析构函数,但是其他函数,由于无法访问父类的非public函数,就无法直接调用父类的析构函数了。

考虑下面的代码,父类P没有无参构造函数,当调用子类C的有参构造函数时,由于没有采用C(int i):P(i)的形式,先调用父类的有参构造函数,所以P的无参构造函数会首先被调用!这样就会引起编译器报错。

 C++ |  copy code |? 
01
  class P{
02
      public:
03
          P(int i):val(i){}
04
 
05
      private:
06
          int val;
07
  };
08
 
09
  class C : public P{
10
      public:
11
          C(int i){
12
              P(i);
13
          }
14
  };
15
 
16
  int main(){
17
      C *c = new C(1);
18
      return 0;
19
  }

但是,如果子类C的有参构造函数,必须对它的参数先进行处理,然后才能初始化父类中的值,该怎么办呢?

答案是:为父类P添加一个无参构造函数,和一个接受参数的init函数。

 C++ |  copy code |? 
01
  class P{
02
      public:
03
          P(int i):val(i){}
04
          P(){}
05
 
06
          void init(int i){
07
              val = i;
08
          }
09
 
10
      private:
11
          int val;
12
  };
13
 
14
  class C : public P{
15
      public:
16
          C(int i){
17
              init(i);
18
          }
19
  };
20
 
21
  int main(){
22
      C *c = new C(1);
23
      return 0;
24
  }

那么结论是不是c++里子类想调用父类的构造函数,是不是只能在初始化列表里调用呢?这样不会太麻烦了吗?为什么这样设计呢?

另外,记得在某个地方看到过,如果一个类有可能成为别的类的父类,那么就必须要有无参构造函数。现在明白为什么了!

在《C++大学教程》第三版的第四章《引用变量》看到这样一句话:

C++中的引用变量是C中没有的。

很疑惑,C中不也有&符号吗?不过那里是叫取地址符。这两个有什么区别呢?

在网上搜了搜,自己写了以下一段代码来区分它们:

 C++ |  copy code |? 
01
02
#include <iostream>
03
using std::cout;
04
using std::endl;
05
void init(char ** ptr){
06
*ptr = "this is c style";
07
}
08
void init(char * &amp;ptr){
09
ptr = "this is c++ style";
10
}
11
int main(){
12
char * ptr;
13
init(&amp;ptr); // 取地址符
14
cout &lt;&lt; ptr &lt;&lt; endl;
15
init(ptr); // 引用调用
16
cout &lt;&lt; ptr &lt;&lt; endl;
17
return 0;
18
}

可以看出,C++中的引用变量,其实也是把变量所在地址给传递过去,但是使用起来,却不像指针那样还需要解引用(*)。这样就给编程带来了一定的便利。

那么引用和指针又有什么区别呢?

首先,引用必须在声明的同时初始化。而指针不必。

其次,引用变量不可改变,引用变量指向的对象内容可以改变。所以,没有这样的声明方式:int &const pi = 1; 因为pi本来就是const的了。

为了加深对c++的了解,做了习题:

 C++ |  copy code |? 
01
// learning C++ 4.1
02
 
03
void swapByPointer (int * p1, int * p2){
04
 
05
*p2 = *p1 + *p2;
06
 
07
*p1 = *p2 - *p1;
08
 
09
*p2 = *p2 - *p1;
10
 
11
}
12
 
13
void swapByRef(int &amp; p1, int &amp; p2){
14
 
15
p2 = p1 + p2;
16
 
17
p1 = p2 - p1;
18
 
19
p2 = p2 - p1;
20
 
21
}
22
 
23
// learning C++ 4.2
24
 
25
void find(int const * array, std::size_t const dim, int &amp;min, int &amp;max){
26
 
27
if (dim &lt;= 0){
28
 
29
return ;
30
 
31
}
32
 
33
min = array[0];
34
 
35
max = array[0];
36
 
37
for(std::size_t i = 1; i &lt; dim; ++i){ if (array[i] &gt; max){
38
 
39
max = array[i];
40
 
41
}
42
 
43
if (array[i] &lt; min){
44
 
45
min = array[i];
46
 
47
}
48
 
49
}
50
 
51
}

那么int *& 与 int &的区别是什么呢?

 C++ |  copy code |? 
01
int *i = new int(1);
02
 
03
int &amp; ri = *i;
04
 
05
cout &lt;&lt; ri &lt;&lt; endl;
06
 
07
int* &amp; rpi = i;
08
 
09
cout &lt;&lt; *rpi &lt;&lt; endl;
10
 
11
int j = 1;
12
 
13
int &amp; rj = j;
14
 
15
//int* &amp; rpj = &amp;j; // error: 将类型为 ‘int*&amp;’ 的非 const 引用初始化为类型为 ‘int*’ 的临时变量无效
16
 
17
int * p = &amp;j;

可以看出,int & ri = *i; 声明的ri是一个指向int型的引用(即*i的值),如果i=new int(2),ri的内容也不会发生变化;而int* & rpi = i;声明的rpi是指向int指针的引用,所以如果i=new int(2),rpi的内容会随之变化。

同时,由上面的error语句也可以看出,引用与取地址是不同的!(不过这里还有一点迷糊)

抓包工具,使用过linux下的tcpdump和windows下的fiddler。fiddler虽然挺好用,但是可能我用的版本较旧,不可以针对firefox进行抓包,感觉很不方便。

而且出于对linux下开源软件的偏爱,对ethereal的好感,现在开始学习使用ethereal的后代wireshark进行抓包并分析。

分析对象:http://register.myspace.cn/。由于这个是我刚做的,对其比较了解,而且它的功能较简单,所以选用它。

网页操作流程:打开http://register.myspace.cn/,选择普通人,输入邮箱地址。结束。

推测的响应为:register.myspace.cn的页面响应,以及检查邮箱是否可用的ajax调用响应。

抓包结果(过滤后的):

针对register.myspace.cn,选择普通人注册,填写邮箱地址后的抓包结果

使用的过滤条件:(http && ip.dst eq 222.131.84.233 ) && (http.response.code == 200)

该过滤条件的意思是:http协议,ip目标地址为我本机,并且http code为200. 之所以选择这样的过滤条件,是因为我的分析目标当前定位为http和ajax调用。

依次分析每一条http响应:

首先第一条是对register.myspace.cn的页面响应:

可以看到gzip的功效:Content-encoded entity body (gzip): 5682 bytes -> 18588 bytes。由于支持gzip,从而使网络传输从18588 bytes减少到了5682bytes。

另外,可以看到,由于传输大小超过了tcp包的上限,所以进行了分片:

tcp包分片

从窗口中部的line-based text data可以看到gzip解码后的相应内容,也就是html代码。

从图上可以看到有一条http响应的type是application/json的:

这就是ajax调用的响应,我希望看到它整个调用的过程,所以在该条目上点击右键,选择“follow tcp stream”,可以看到整个请求和响应。

POST /_Common/AjaxService/SignupSvc.svc/json/CheckEmailExist HTTP/1.1
Host: ajaxv2.myspace.cn
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5
Referer: http://ajaxv2.myspace.cn/_common/static/post.html
Content-Length: 24
Origin: http://ajaxv2.myspace.cn
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Cookie:*
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
email=agasdgna@gmail.com
HTTP/1.1 200 OK
Cache-Control: private
Date: Wed, 17 Feb 2010 14:03:01 GMT
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/6.0
X-UA-Compatible: IE=EmulateIE7
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
a
……….
34
…@.]~.P…. .. 9W…wI..y…7….A…..|.@….
0

响应结果解码为:{“Msg”:”NoSignup”,”Result”:0}

ps:follow tcp stream后,可以点击弹出窗口右下角的“filter out this stream”,将当前查看过的包排除。

通过对这些网络请求和响应的分析,可以把握整个网络协议的细节,也可以对ajax请求进行方便的调试。

我选择了以下格式的固定链接:

http://b.cy.com/index.php/2010/02/16/sample-post/

如果是在apache下,wordpress会在有权修改.htaccess的情况下,自动修改rewriterule,但是我用的web服务器是nginx,所以需要手工修改如下:

if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
保存之后,重新load nginx即可:
sudo nginx -s reload