客户端基于WordPress的网站有员工页面,url如下:/bio/john-doe/
/bio/nim-rod/
等等…
但是在他们印刷的宣传册和名片上,他们希望url是这样的:/nim.rod
并让网站显示/bio/nim-rod/
页面。
根据客户端,这以前是工作的。在plugins文件夹中有一个php文件,它看起来像重写了这个功能的规则(见下文),但我不能让它工作。
我研究了这个问题,并在WordPress的支持网站上找到了这篇文章,但建议的修复不起作用:
为了解决这个问题,我在代码中添加了一些测试规则,例如,这个规则确实将/any.name
重定向到/bio/nim-rod/
页面,
$newrules['([a-zA-Z]+).([a-zA-Z]+)'] = 'index.php?pagename=nim-rod';
因此重写模块正在查找自定义规则并显示/bio/nim-rod/
页面,但是使用正则表达式匹配的现有规则最终会显示站点的404页面。因此,从正则表达式模式中替换匹配的值似乎有问题,但我找不到语法上的任何错误,我不知道如何进一步解决问题。现有的模式看起来应该行得通,不是吗?
你能给我指出一些故障排除提示吗?
有什么工具在那里,我可以用来调试或检查正则表达式是如何工作的?
<?php
/**
* @package Custom_Redirector
* @version 1.0.0
*/
/*
Plugin Name: Custom Redirector
Plugin URI: http://wordpress.org/#
Description:
Version: 1.0.0
Author URI: http://ma.tt/
*/
add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');
// Remember to flush_rules() when adding rules
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
// Adding a new rule
function wp_insertMyRewriteRules($rules)
{
$newrules = array();
$newrules['([a-zA-Z]+).([a-zA-Z]+)'] = 'index.php?pagename=$matches[1]-$matches[2]';
return $newrules + $rules;
}
// Adding the id var so that WP recognizes it
function wp_insertMyRewriteQueryVars($vars)
{
array_push($vars, 'id');
return $vars;
}
?>
试试这个;
([a-zA-Z]+)(?:.|-)([a-zA-Z]+)
顺便说一下,对于这个字符串,它匹配两个东西index.php?pagename=nim-rod
:
index.php
?pagename= nim-rod
如果不需要,则使用;
([a-zA-Z]+)-([a-zA-Z]+)