客户基于WordPress的网站上有员工页面,其网址如下:
/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页面。 因此,用正则表达式模式替换匹配的值似乎有问题,但是我找不到语法有问题,也不知道如何进一步解决它。 现有模式看起来应该可行,不是吗?

大约6个月前,服务器出现了硬件问题,我们的前WordPress / PHP专家重建了该站点并将其升级到版本3.3.1。 我不知道旧版本是什么,但是新版本可能会破坏此功能。

您是否可以向我指出故障排除提示?
有什么工具可以用来调试或检查正则表达式的工作方式?

<?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;
}
?>

===============>>#1 票数:0

尝试这个;

([a-zA-Z]+)(?:\.|-)([a-zA-Z]+)

顺便说一下,对于这个字符串,它匹配两件事index.php?pagename=nim-rod

index.php ?pagename = nim-rod

如果您不想要,请使用;

([a-zA-Z]+)-([a-zA-Z]+)

  ask by Dan translate from so

未解决问题?本站智能推荐: