- 我使用了许多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行。
答案 0 :(得分:1)
此请求http://www.daysoftheyear.com/days/waffle-day/
与您的第四条规则不符,因为您在组内-
内不允许([A-Za-z].*)
。([A-Za-z\-].*)
。将此论坛替换为{{1}},它应该匹配
HTH
答案 1 :(得分:0)
解决;看来上面的规则集现在可以正常运行了 - 谢谢大家!