IIS Rewrite
IIS 要实现 WordPress 的 URL Rewrite 目前有三个选择:
ISAPI Rewrite 免费版要自己写N多规则,不方便;WordPress URL Rewrite IIS 组件据说不支持中文TAG,所以直接选择了国人开发的 wp-url-rewriting-on-iis 。不过没想到 wp-url-rewriting-on-iis 也对中文 TAG 支持也不好,所以就写了 wp hook 来解决这个问题:
function fix_url_rewrite() { $uri = $_SERVER['REQUEST_URI']; if (strpos($uri, 'archives/tag') !== false) { if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { $q_tag = end( explode('/', $_SERVER['HTTP_X_REWRITE_URL']) ); $_GET['tag'] = $q_tag; } return true; } } add_action("init", 'fix_url_rewrite', -999);
重定向搜索引擎收录的链接
写了个有点啰嗦的 wp hook。
function the_url_redirect($url, $permanently) { @ob_clean(); @ob_end_clean(); if ($permanently) header("HTTP/1.1 301 Moved Permanently"); header("Location: $url"); exit(); } function fix_url_rewrite() { $uri = $_SERVER['REQUEST_URI']; if (strpos($uri, 'archives/tag') !== false) { if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { $q_tag = end( explode('/', $_SERVER['HTTP_X_REWRITE_URL']) ); $_GET['tag'] = $q_tag; } return true; } if (strpos($uri, 'archives') !== false || strpos($uri, 'wp-admin') !== false) return true; $q = $_SERVER['QUERY_STRING']; $f = end(explode('/', current(explode('?', $uri)))); $h = get_bloginfo( 'url' ) . '/'; $page_map = array( 'default.asp' => '', 'stats.asp' => '', 'user.asp' => '', 'feed.asp' => 'feed', 'trackback.asp' => '', 'comment.asp' => '', 'register.asp' => 'wp-login.php?action=register', 'gbook.asp' => 'guestbook', 'game.asp' => 'game', 'about.asp' => 'about', 'admin.asp' => 'wp-admin', ); if (empty($q) && isset($page_map[$f])) the_url_redirect($h . $page_map[$f], true); $qa = array(); parse_str($q, $qa); if (isset($qa['id']) && $qa['id']) { switch ($f) { case '': case 'default.asp': the_url_redirect($h . 'archives/' . $qa['id'], true); break; case 'trackback.asp': the_url_redirect($h . 'archives/' . $qa['id'] . '/trackback', true); break; case 'feed.asp': the_url_redirect($h . 'archives/' . $qa['id'] . '/feed', true); break; } } elseif (isset($qa['date']) && $qa['date']) { if ($f == '' || $f == 'default.asp') the_url_redirect($h . 'archives/date/' . str_replace('-', '/', $qa['date']), true); } elseif (isset($qa['page']) && $qa['page'] && ($f == '' || $f == 'default.asp')) { the_url_redirect($h . 'page/' . $qa['page'], true); } elseif (isset($qa['selected']) && $qa['selected'] && $f == '') { the_url_redirect($h . 'archives/tag/selected', true); } elseif (strpos($f, '.asp') !== false) { the_url_redirect($h, true); } } add_action("init", 'fix_url_rewrite', -999);
不过没想到旧的 asp 链接请求不会被转发到 WordPress 系统,于是干脆在那几个asp文件里直接加了跳转代码。
用了 wp-url-rewriting-on-iis 后,貌似 WordPress 有时候(譬如访问一篇实际不存在的日志)不能正常抛出 404 页面,在 index.php 和 single.php 模板页面加了以下代码来解决该问题:
if (!have_posts()) { // Fix 404 $wp_query->is_404 = true; if (!headers_sent()) { header("HTTP/1.1 404 Not Found"); } include get_404_template(); exit(); }
改天再试下老外开发的 WordPress URL Rewrite IIS 组件,看看是否也有上述问题。
Pages: 1 2
不折腾,转来转去够麻烦的
@panda:
LBS 许久不更新了,spammer 猖獗,换了好,呵呵
Bo-Blog 转 WP 应该比 LBS 转 WP 容易的多
好麻烦的说...
@wayne: 呃,过程是有点复杂
楼主介绍的不错,我也遇到了转换的问题,希望能找你帮下忙。我的QQ:59153770
谢谢
留个名,正准备转换,用了LBS三年多了,实在是累了。
还是wp用的舒服。
有不懂的再来请教一下。