IIS下wordpress永久链接(PermaLink)不用rewrite使用404页面实现

如果是在Linux主机下,主机支持mod_rewrite的话,那就不需要费那么大的劲,但是一部分WordPress是安装在Windows主机上的,要想使伪静态就有点麻烦。我在网上找了很多wordpress的rewrite规则,但是都不敢用。wordpress又不提供标准rewrite规则,真是麻烦。

在网上找wordpress的404页面使用的时候居然找到一个教程,原理是利用404错误页面重写URL,达到wordpress的伪静态。这样就可以在IIS下实现漂亮的URL。

第一,建一个404.php文件在你的WordPress根目录中,文件内容如下:
<?php
$qs = $_SERVER[‘QUERY_STRING’];
$_SERVER[‘REQUEST_URI’] = substr($qs, strpos($qs, ‘:80′)+3);
$_SERVER[‘PATH_INFO’] = $_SERVER[‘REQUEST_URI’];
include(’index.php’);
?>

第二,设置站点404错误页面,独立服务器的可以直接操作IIS,如果是虚拟主机的,现在大部分虚拟主机控制面板都支持设置404错误页面,你把地址设置为”/404.php”。
自己管理iis的,可以通过网站属性-自定义错误来设置404错误页面,不过也要用绝对地址”/404.php”。
第三,登陆你的wordpress后台,设置->永久链接,结构可以任意设置,如:
/%year%/%monthnum%/%postname%/

问题:
不支持中文,postname和tag最好是英文的,中文的还是无法访问。中文的tag可以去设置一下tag slug

在网上查一些资料,才明白原因。原来带有中文的postname和tag的url其实是属于gbk编码,但是wordpress是utf-8编码。所以在404页面中要把网址转码称utf-8,这样就能完美解决404页面实现rewrite的不支持中文问题。

渴慕晨光使用的404页面是:404错误页面

wordpress模板和调用函数

WordPress基本模板文件

一套完整的WordPress模板应至少具有如下文件:

style.css : CSS(样式表)文件
index.php : 主页模板
archive.php : Archive/Category模板
404.php : Not Found 错误页模板
comments.php : 留言/回复模板
footer.php : Footer模板
header.php : Header模板
sidebar.php : 侧栏模板
page.php : 内容页(Page)模板
single.php : 内容页(Post)模板
searchform.php : 搜索表单模板
search.php : 搜索结果模板

当然,具体到特定的某款模板,可能不止这些文件,但一般而言,这些文件是每套模板所必备的。

基本条件判断Tag

is_home() : 是否为主页
is_single() : 是否为内容页(Post)
is_page() : 是否为内容页(Page)
is_category() : 是否为Category/Archive页
is_tag() : 是否为Tag存档页
is_date() : 是否为指定日期存档页
is_year() : 是否为指定年份存档页
is_month() : 是否为指定月份存档页
is_day() : 是否为指定日存档页
is_time() : 是否为指定时间存档页
is_archive() : 是否为存档页
is_search() : 是否为搜索结果页
is_404() : 是否为 “HTTP 404: Not Found” 错误页
is_paged() : 主页/Category/Archive页是否以多页显示

Header部分常用到的PHP函数

<?php bloginfo(’name’); ?> : 博客名称(Title)
<?php bloginfo(’stylesheet_url’); ?> : CSS文件路径
<?php bloginfo(’pingback_url’); ?> : PingBack Url
<?php bloginfo(’template_url’); ?> : 模板文件路径
<?php bloginfo(’version’); ?> : WordPress版本
<?php bloginfo(’atom_url’); ?> : Atom Url
<?php bloginfo(’rss2_url’); ?> : RSS 2.o Url
<?php bloginfo(’url’); ?> : 博客 Url
<?php bloginfo(’html_type’); ?> : 博客网页Html类型
<?php bloginfo(’charset’); ?> : 博客网页编码
<?php bloginfo(’description’); ?> : 博客描述
<?php wp_title(); ?> : 特定内容页(Post/Page)的标题

模板常用的PHP函数及命令

<?php get_header(); ?> : 调用Header模板
<?php get_sidebar(); ?> : 调用Sidebar模板
<?php get_footer(); ?> : 调用Footer模板
<?php the_content(); ?> : 显示内容(Post/Page)
<?php if(have_posts()) : ?> : 检查是否存在Post/Page
<?php while(have_posts()) : the_post(); ?> : 如果存在Post/Page则予以显示
<?php endwhile; ?> : While 结束
<?php endif; ?> : If 结束
<?php the_time(’字符串’) ?> : 显示时间,时间格式由“字符串”参数决定,具体参考PHP手册
<?php comments_popup_link(); ?> : 正文中的留言链接。如果使用 comments_popup_script() ,则留言会在新窗口中打开,反之,则在当前窗口打开
<?php the_title(); ?> : 内容页(Post/Page)标题
<?php the_permalink() ?> : 内容页(Post/Page) Url
<?php the_category(’, ‘) ?> : 特定内容页(Post/Page)所属Category
<?php the_author(); ?> : 作者
<?php the_ID(); ?> : 特定内容页(Post/Page) ID
<?php edit_post_link(); ?> : 如果用户已登录并具有权限,显示编辑链接
<?php get_links_list(); ?> : 显示Blogroll中的链接
<?php comments_template(); ?> : 调用留言/回复模板
<?php wp_list_pages(); ?> : 显示Page列表
<?php wp_list_categories(); ?> : 显示Categories列表
<?php next_post_link(’ %link ‘); ?> : 下一篇文章链接
<?php previous_post_link(’%link’); ?> : 上一篇文章链接
<?php get_calendar(); ?> : 日历
<?php wp_get_archives() ?> : 显示内容存档
<?php posts_nav_link(); ?> : 导航,显示上一篇/下一篇文章链接
<?php include(TEMPLATEPATH . ‘/文件名’); ?> : 嵌入其他文件,可为定制的模板或其他类型文件

与模板相关的其他函数

<?php _e(’Message’); ?> : 输出相应信息
<?php wp_register(); ?> : 显示注册链接
<?php wp_loginout(); ?> : 显示登录/注销链接
<!–next page–> : 将当前内容分页
<!–more–> : 将当前内容截断,以不在主页/目录页显示全部内容
<?php timer_stop(1); ?> : 网页加载时间(秒)
<?php echo get_num_queries(); ?> : 网页加载查询量

IIS主机永久链接去index.php简约方法

之前写日子用Dean’s Permalinks Migration插件更改了博客的永久链接,可是由于是IIS主机,必须得在永久链接里保留index.php,无疑加深了一个不必要的层次结构。在网上搜索了N多次,结果发现用第三方插件可以实现去除index.php,即可以用ISAPI_Rewrite组件实现类似linux主机apache环境的mod_rewrite的url rewrite地址重写功能,但必须要拥有服务器上运行该组件的权限,因此就放弃了。

又过数日,在BO-BLOG里面发现上下篇日志是分类里面的上下篇,于是就上网搜索wp能不能也这么做。结果就搜索到了一篇win iis虚拟主机不需任何wordpress插件,不需要第三方组件完美的wordpress伪静态设置方法。实现非常简单,创建的新文件我放在了跟目录。当然,前提条件是服务器提供商的控制面板有自定义404错误页面的选项。

你只需创建一个404错误页面,并且写入下列4行代码即可简单优雅的实现无插件完美支持windows iis主机的永久固定链接的伪静态化地址格式。去掉网页地址中的index.php!

<?php
$qs = $_SERVER[‘QUERY_STRING’];
$_SERVER[‘REQUEST_URI’] = substr($qs, strpos($qs, ‘:80′)+3);
$_SERVER[‘PATH_INFO’] = $_SERVER[‘REQUEST_URI’];
include(’index.php’);
>

这样即可固定REQUEST_URI和PATH_INFO参量并且包括进去index.php,剩下的将交给wordpress完成任务(说实话,这参数定义代码偶也不清楚,依葫芦画瓢即可)。
具体设置步骤:

1.新建一个记事本,在里面写入上面代码,保存,连同txt格式重新命名为wp-404-handler.php。
2.设置404自定义错误指向wp-404-handler.php,一般来说,绝大多数服务器控制面板均提供该选项。
3.进入wordpress管理后台,设置(Options)-永久链接),你就当自己的主机是linux主机使好了,任意、随便设置自己喜欢的伪静态地址格式及静态地址后缀。
4.Enjoy!

WordPress错误:Cannot modify header information

Warning: Cannot modify header information – headers already sent by (output started at /www/htdocs/xiaokyun/wp-config.php:1) in /www/htdocs/xiaokyun/wp-login.php on line 255

Warning: Cannot modify header information – headers already sent by (output started at /www/htdocs/xiaokyun/wp-config.php:1) in /www/htdocs/xiaokyun/wp-login.php on line 267
Warning: Cannot modify header information – headers already sent by (output started at /www/htdocs/xiaokyun/wp-config.php:1) in /www/htdocs/xiaokyun/wp-includes/pluggable.php on line 649
Warning: Cannot modify header information – headers already sent by (output started at /www/htdocs/xiaokyun/wp-config.php:1) in /www/htdocs/xiaokyun/wp-includes/pluggable.php on line 650
Warning: Cannot modify header information – headers already sent by (output started at /www/htdocs/xiaokyun/wp-config.php:1) in /www/htdocs/xiaokyun/wp-includes/pluggable.php on line 651
Warning: Cannot modify header information – headers already sent by (output started at /www/htdocs/xiaokyun/wp-config.php:1) in /www/htdocs/xiaokyun/wp-includes/pluggable.php on line 850
上网搜索了一下,大致有两种解决方案,整理了一下,主要的造成的原因和解决办法如下:
1.php.ini配置问题,解决办法:打开 php.ini 然后把 output_buffering 设为 on ,重启appache即可。
2.使用windows记事本编辑的wp-config文件造成(UTF8编码和BOM冲突),解决办法:使用Notepad++、UltraEdit、EditPlus等编辑器编辑文件,一般的主机管理系统自带的编辑功能也不错。
或者,将wp-config.php另存为ANSI编码。
如果是安装PHP其他程序或者自己写的程序出现以上问题,除了以上两种可能,还有可能是setcookie的问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数 ob_start(); 格式如下:
ob_start :打开输出缓冲区
函数格式:void ob_start(void)

走出ZA7升级到ZA8过程中的重重泥沼

最近看到很多网友在苦苦寻觅升级到ZA8的注册机未果,以及原来ZA7用的是Full License的Key结果升级到ZA8,发现AntiSpyware功能受限,而且无法更改Key。现在我来说一下这些问题的解决方法。以下以 ZoneAlarm Pro版本为例。ZASS 和ZA Antispyware的注册码,用我附上的这个注册机也可以算出来。

【提醒】

1.该文中的注册机需要配合下文所述的方法2来使用。

2.如果你现在用的就是ZA8,你可以备份当前的ZA全部配置(Overview-Preference-Backup),然后按照下面搞定之后重新导入 即可(Overview-Preference-Restore)。如果是ZA7,好像是不能导入到ZA8的,至少我不建议这样做(只是按照我的经验,未 经确认。以前尝试从低版本导入高版本,有莫名其妙的问题)。

【1.关于无法更换Key的解决步骤:】

无论你现在是安装的ZA7准备装ZA8,还是已经装了ZA8,正在苦于无法换Key。跟我来做:

1. 点击 开始-所有程序-Zonealarm,右键点击Uninstall Zonealarm Security选择属性,然后把”C:Program FilesZone LabsZoneAlarmzauninst.exe”,改为

“C:Program FilesZone LabsZoneAlarmzauninst.exe”   /clean   /rmlicense

注意, /clean   /rmlicense的“/”前面都分别有一个半角空格。

/clean   完全卸载ZA

/rmlicense 删除ZA保存的授权信息

2.然后点击这个修改了的卸载快捷方式。 OK,现在已经完全卸载了。

3.重装你的ZA8吧,你发现你现在可以换key了。(建议,安装的时候选择Continue Trial,先不要输注册码,以后到主界面输入)

【2.关于破解,注册ZA8】

如果你用以前的Full License的Key的话,现在的Spyware部分的功能会提示过期。当然,你不在乎这个功能的话,你完全可以继续用这个key。如果你依旧想要 spyware的功能,而且你没有key,或者用注册机(坛子里面网友贴出来的注册机)算出来的key重启之后会失效的话(我这里算出来的key,重启就 失效了,重回15天),按照我下面的方法做:

0.如果你用了以前的full license key,Antispyware变红了的话,请按照上面的第一步完全重装ZA8。

1.正确安装ZA8,确保key是可替换状态(没用过以前的Full License key, Antispyware没有变红)。

2.一定请使用我下面的注册机,算出来ZA Pro 8的key备用。(说明,有的人说如果你RP足够好,这个注册机算出来的key可以真正激活。也有的人说重新开机会失效,看你的RP了。如果你激活重启之 后也不回滚,那么你不需要进行下面步骤。不过无所谓了,不管你RP好坏,都可以继续下面的步骤。)

使用Key的时候,不可以使用以前的Full License的Key!切记。否则AntiSpyware那里还会变红的。
3. 关闭你当前的网络连接!!!!!!!!

4. 进入ZA主界面的Product Info界面的Change Lic.那个按钮。输入你刚才算出来的key,不出意外他会提示你更新成功。确定,然后关闭这个窗口。

5.重启电脑,按F8进入安全模式(不带网络功能的安全模式)。

6.文件夹选项里面,打开显示隐藏文件的那一项。然后进入下述目录

XP系统:C:WindowsSystem32

Vista系统:C:programDataCheckPointZonealarm   (programdata目录默认隐藏的)

看见那个隐藏的zllictbl.dat文件了吗?这个就是Key相关的文件。右键点他,选择属性,然后加上“只读”属性。设定好之后,到文件夹属性里面,隐藏掉隐藏属性的文件。

7.重启电脑,恢复你的网络连接。现在你应该会有65535天的使用期限,而且是全功能的。

文件名: Keygen.rar 下载链接: http://www.brsbox.com/filebox/down/fc/a8aa8510bdd5de27636f164391f7b916