我有一个相当复杂的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/anythinghere
到
sub1
,
sub2/anythinghere
到
sub2
等等
谢谢你的帮助。
SO网友:kaiser
这里有一些注释。
安装Toschosrewrite 插件安装Jan Fabrysrewrite analyzer 插件使用Rewrite API将规则添加到top
.还有一个功能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之前的文件。