如何为单个类别创建IIS7重写规则

时间:2015-01-20 作者:KTMcQuaid

我在IIS7服务器上安装了WordPress。我目前使用的permalinks设置为/news/%category%/%postname%/,因此我所有类别登录页的URL都是以/news/{category name}的形式。

我现在已经建立了一个类别,我不希望遵循这种一般模式。我不想使用url/news/newcat,而想使用just/newcat。

到目前为止,我已经能够在配置文件中设置如下规则:

   <rule name="67" patternSyntax="ExactMatch" stopProcessing="true">
   <match url="newcat/" ignoreCase="true" />
   <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
   <action type="Redirect" url="news/newcat" redirectType="Permanent" />
    </rule>
这可以完成工作,但它会更改地址栏中的URL-我很贪婪,想要一切-重定向页面并将URL显示为“新”URL。

我的下一个想法是重写,这就是我陷入困境的地方。我尝试过:

    <rule name="wordpress2" stopProcessing="true">
        <match url="newcat/" />
        <action type="Rewrite" url="index.php?category_name=newcat" />
    </rule>
还有一些变化,但没有成功。有人能提出建议吗?

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

我强烈建议不要使用IIS,在WordPress中实现您的要求:

/**
 * Remove category base from "newcat" permalink.
 *
 * @param   string  $link
 * @param   object  $term
 * @return  string
 */
function wpse_175424_term_link( $link, $term ) {
    if ( $term->taxonomy === \'category\' && $term->slug === \'newcat\' )
        $link = home_url( user_trailingslashit( $term->slug ) );
    return $link;
}

add_filter( \'term_link\', \'wpse_175424_term_link\', 10, 2 );

/**
 * Add our custom rewrite rule to the top of category rules.
 *
 * @param   array   $rules
 * @return  array
 */
function wpse_175424_category_rewrite_rules( $rules ) {
    global $wp_rewrite;

    $matches_1 = $wp_rewrite->preg_index( 1 );
    $new_rules = array(
        \'newcat/feed/(feed|rdf|rss|rss2|atom)/?$\' => "$wp_rewrite->index?category_name=newcat&feed=$matches_1",
        \'newcat/(feed|rdf|rss|rss2|atom)/?$\' => "$wp_rewrite->index?category_name=newcat&feed=$matches_1",
        \'newcat/page/?([0-9]{1,})/?$\' => "$wp_rewrite->index?category_name=newcat&paged=$matches_1",
        \'newcat/?$\' => "$wp_rewrite->index?category_name=newcat",
    );

    return $new_rules + $rules;
}

add_filter( \'category_rewrite_rules\', \'wpse_175424_category_rewrite_rules\' );
添加代码后,需要刷新重写规则(只需访问设置>永久链接页面即可)。

注意,我已经硬编码了newcat 在这两个功能中,如果您需要灵活使用;由ID/选项拉动,这很容易。

结束

相关推荐

Custom permalinks structure

我希望有这样的结构:www.mysite.com/2013 (必须显示2013年的所有职位)www.mysite.com/my-category/2013 (必须显示2013年和“我的类别”类别的所有帖子)www.mysite.com/my-category/my-tag/ (必须显示所有类别为“我的类别”和标记为“我的标记”的帖子)www.mysite.com/my-category/ (必须显示“我的类别”类别的所有帖子)www.mysite.com/my-