我已经做了几天了,这里有很多答案和使用指南。htaccess、在Wordpress中使用add\\u rewrite\\u rule()的指南以及整个web的示例。我不确定我的正则表达式中是否存在检测正确URL的故障,或者我想要完成的内容与可以完成的内容之间是否存在脱节。
基本上,我试图通过强制将评论与帖子(或者更好的是,评论与内容)分离到与内容“关联”的单独页面。例如,http://localhost/wp/2011/02/25/hello-world-2/
是一篇文章,该文章的评论应出现在http://localhost/wp/2011/02/25/hello-world-2/comments/
. 现在,a"little bird" 曾经说过,这可以通过以下方式实现:
RewriteRule ^archives/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comments/?$ /index.php?year=$1&monthnum=$2&day=$3&name=$4&comments=1 [QSA,L]
(鉴于我不需要在/归档文件中工作,为了让我的上述示例工作,我删除了它),我将其转换为以下插件:
<?php
/*
Plugin Name: Gingah Permalink Rewrite
Plugin URI: http://gingahmail.com/wordpress/
Description: Useful Permalink-structures, that required a plugin to work.
Version: 1.0
Author: Gingah
Author URI: http://gingahmail.com/
*/
register_activation_hook( __FILE__, \'gingah_rewrite_activate\' );
function gingah_rewrite_activate() {
gingah_rewrite();
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, \'gingah_rewrite_deactivate\' );
function gingah_rewrite_deactivate() {
flush_rewrite_rules();
}
add_action(\'admin_init\', \'gingah_rewrite\');
function gingah_rewrite() {
add_rewrite_rule( \'^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comments/?$\', \'/index.php?year=$1&monthnum=$2&day=$3&name=$4&comments=1 [QSA,L]\', \'top\' );
}
?>
(基于网络上无数的例子)
然而,这并不起作用。尽管如此http://localhost/wp/2011/02/25/hello-world-2/?comments=1
确实产生了预期的结果。那么这里出了什么问题?
最合适的回答,由SO网友:Jan Fabry 整理而成
默认情况下,WordPress重写规则不再存储在Apache配置中,而是由WordPress本身处理。5年前编写该论坛主题时,情况可能并非如此,但目前只有“外部”规则最终出现在Apache配置中,所有其他规则都存储在数据库中,由the WP::parse_request()
function.
这意味着您应该在add_rewrite_rule()
呼叫以下代码看起来更好:
add_rewrite_rule(
// The beginning `^` is added by WordPress
\'([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comments/?$\',
// `$1` should be replaced with `$matches[1]`
\'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&comments=1\',
\'top\'
);
当我用
my Rewrite analyzer plugin, 我注意到了
comments
不是标准查询变量,因此请记住,您也必须处理它。