External/non-WP rewrite rules

时间:2012-11-16 作者:JVD

我有一个相当复杂的wordpress,有多个子目录:

example.com/sub1/
example.com/sub2/
我正在尝试实现一些历史记录/书签支持,为此,我需要将包含这些目录的URL重写到目录,而不是索引页。从那里,AJAX可以接管、解释第一个URL并加载内容。

我相信要做到这一点,我需要使用$wp_rewrite->non_wp_rules

到目前为止,我甚至无法编写从一个目录到另一个目录的简单重写:

//flush the rules//
function test_flush_rewrites() 
{
 global $wp_rewrite;
 $wp_rewrite->flush_rules();
};
//add new rule//
function test_add_rewrites() 
{
 global $wp_rewrite;
 $test_new_non_wp_rules = array(
    \'sub1/\' => \'sub2\',
 );
 $wp_rewrite->non_wp_rules = $test_new_non_wp_rules + $wp_rewrite->non_wp_rules;
};
//add the actions//
add_action(\'generate_rewrite_rules\', \'test_add_rewrites\');
add_action(\'admin_init\', \'test_flush_rewrites\');
这将导致404 当我导航到“sub1“”目录。

而且

\'sub1\'    => \'sub2\' // does nothing
\'/sub1/\'  => \'sub2\' // does nothing
\'/?sub1/\' => \'sub2\' // does nothing
我相信我想写的规则.htaccess 应该是这样的:

RewriteRule ^([^/]+)/.*$ /$1/ 
理想情况下,我想重定向sub1/anythingheresub1, sub2/anythingheresub2 等等

谢谢你的帮助。

1 个回复
SO网友:kaiser

这里有一些注释。

安装Toschosrewrite 插件安装Jan Fabrysrewrite analyzer 插件Rewrite APItop.还有一个功能add_external_rule(), 应通过访问

$GLOBALS[\'wp_rewrite\']->add_external_rule();
您的所有外部规则都可以通过$wp_rewrite->non_wp_rules. 以下是内部结构,向您展示了如何在内部添加规则$wp_rewrite->mod_rewrite_rules():

// add in the rules that don\'t redirect to WP\'s index.php (and thus shouldn\'t be handled by WP at all)
foreach ( (array) $this->non_wp_rules as $match => $query) {
    // Apache 1.3 does not support the reluctant (non-greedy) modifier.
    $match = str_replace(\'.+?\', \'.+\', $match);

    // If the match is unanchored and greedy, prepend rewrite conditions
    // to avoid infinite redirects and eclipsing of real files.
    //if ($match == \'(.+)/?$\' || $match == \'([^/]+)/?$\' ) {
        //nada.
    //}

    $rules .= \'RewriteRule ^\' . $match . \' \' . $home_root . $query . " [QSA,L]\\n";
}
该方法的phpDocBlock声明如下

检索mod_rewrite 要写入的格式化重写规则.htaccess.

实际上不会写入.htaccess 文件,但为将要执行的流程创建规则。

将非\\u wp\\u rules属性规则添加到.htaccess WordPress重写规则1之前的文件。

结束

相关推荐

Ajaxify calendar

我需要一个在wordpress日历中的ajaxify“next”和“prev”链接来导航几个月,而不更新页面。有一些插件可以实现这一点,但我称之为calendar,而不使用小部件——get_calendar();