WordPress:使用URL重写覆盖或绕过自定义帖子类型的重定向规则

时间:2011-09-11 11:15:47

标签: wordpress redirect rewrite

- 我使用了许多WordPress重写规则,允许在URL路径的开头立即注入国家/地区代码,用于确定时区偏移量。一个例子:

add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]&post_type=days','top');

这需要像www.daysoftheyear.com/days/2011/这样的请求(通常会返回此请求的所有有效内容),并允许例如www.daysoftheyear.com/us/days/2011/返回相同的内容,但支持基于国家/地区代码的时区偏移。

除了单个查询类型之外,几乎在所有地方都可以正常使用 - 一个用于'天'自定义帖子类型页面,例如http://www.daysoftheyear.com/days/waffle-day/

我的规则是:

add_rewrite_rule('^([A-Za-z]{2})/?$', 'index.php?geo=$matches[1]','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]&post_type=days','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]$matches[3]&post_type=days','top');   
add_rewrite_rule('^([A-Za-z]{2})/days/([0-9]+)/([0-9]+)/([0-9]+)/?$', 'index.php?geo=$matches[1]&m=$matches[2]$matches[3]$matches[4]&post_type=days','top');
add_rewrite_rule('^([A-Za-z]{2})/days/([A-Za-z\-].*)/?$', 'index.php?geo=$matches[1]&page=$matches[2]','top');
add_rewrite_rule('^([A-Za-z]{2})/([A-Za-z\-].*)/?$', 'index.php?geo=$matches[1]&pagename=$matches[2]','top');

第五条规则匹配http://www.daysoftheyear.com/gb/days/waffle-day/的方式与上面大致相同,但重定向 - 我怀疑它与内置规则相吻合,如果格式错误(例如,如果我输入的话),它会尝试重定向到正确的URL与正确的URL进行紧密的结构匹配,它会将我重定向到正确的资源。

我可以确认此请求的“原始”网址有效 - 例如,http://www.daysoftheyear.com/index.php?geo=en&name=soup-month&post_type=days会返回有效且预期的结果。

我不相信这是一个正则表达式规则,而不是WP管理自定义帖子类型的具体挑战?

修改

更新以允许连字符 - 行为没有变化,尽管regexpal报告正则表达式对示例URL起作用。

禁用WP规范重定向功能后更新 - 现在404'ing而不是301'ing到页面。

根据以下信息更新为使用“页面”而非“页面名称”:http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters - 行为无变化。

更新了代码,添加了一个换行符,并澄清说我实际上是引用第5行而不是第4行。

2 个答案:

答案 0 :(得分:1)

此请求http://www.daysoftheyear.com/days/waffle-day/与您的第四条规则不符,因为您在组内-内不允许([A-Za-z].*)([A-Za-z\-].*)。将此论坛替换为{{1}},它应该匹配 HTH

答案 1 :(得分:0)

解决;看来上面的规则集现在可以正常运行了 - 谢谢大家!