为什么我的修改重写不起作用?

时间:2011-03-02 作者:danixd

好的,我有一个WP站点,使用permalink结构/%category%/%postname%/

我以页面模板的方式构建了它,在其中使用了类别查询,即。

page-help.php

<?php $my_query = new WP_Query(\'category_name=help\');
while ($my_query->have_posts()) : $my_query->the_post(); ?>
     <!--content-->
<?php endwhile; wp_reset_query(); ?>  

page-about.php

<?php $my_query = new WP_Query(\'category_name=about\');
while ($my_query->have_posts()) : $my_query->the_post(); ?>
     <!--content-->
<?php endwhile; wp_reset_query(); ?>   
非常简单。我的问题是,我需要每年为新闻部分建立一个档案。我这样做只是为了archive.php 布局与相同page-news.php 只需查询新闻类别中的帖子*-在我的情况下,这很好,因为新闻是而且永远都不会是要存档的内容。

我的新闻类别(最新新闻)是关于类别(about)的子类别,因此当我转到新闻部分时,url是:

www.example。com/关于/最新消息/

在新闻页面上,使用以下代码列出档案;

<!-- Gets archive for news-->   
<?php $my_query = new WP_Query(\'category_name=news_article\');
while ($my_query->have_posts()) : $my_query->the_post(); ?>
     <?php wp_get_archives(\'type=yearly\'); ?> 
<!--Ends archive for news-->
<?php endwhile; wp_reset_query(); ?>   
它产生的链接自然会引导我

www.example。com/2000

www.example。com/2001

等。我希望重写将其更改为

www.example。com/about/news/2000

www.example。com/about/news/2001

我已经修改了。可湿性粉剂路线中的htaccess:

# BEGIN WordPress  
<IfModule mod_rewrite.c>     
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]    
RewriteRule  /([0-9]+/?)$  /about/latest-news/$1     [NC,L]  #Added this line
</IfModule> 
但我运气不好,url仍然是

www.example。com/2000

我的问题是不知道我的重写是否错误,我是否应该将这行重写放在其他地方的不同htaccess中,或者WordPress是否正在覆盖它。

任何帮助都将不胜感激。

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

首先,你的附加线路来得太晚了。之前的规则会捕获您想要匹配的所有内容。其次,它不是你想要的。您的…

RewriteRule  /([0-9]+/?)$  /about/latest-news/$1     [NC,L]
…匹配以下请求example.com//0000000000000000000/example.com/about/latest-news/2010/ (无限循环!)。的第一个参数RewriteRule 省略起始/.

要匹配您需要的年份档案,请执行以下操作:

RewriteRule  ^(\\d\\d\\d\\d)/?$  /about/latest-news/$1     [NC,L]
我不确定你是否真的需要重写mod\\u。请尝试重写块上方的以下行:

RedirectMatch Permanent ^/(\\d\\d\\d\\d)/?$ /about/latest-news/$1
你必须告诉WordPress你的自定义存档permalinks. 你应该在标签下面找到足够多的好例子。

SO网友:Wietse Venema

如果使用Wordpress而不使用mod\\u rewrite(docs), 所有URL都类似myblog.com/index.php?p=12. 使用mod\\u rewrite,您可以创建漂亮的URL,如myblog.com/mypost. 其工作原理是Apache在内部重写urlmyblog.com/mypostmyblog.com/index.php?p=12, 在将请求移交给Wordpress之前。

因此,mod\\u rewrite用于为您的博客创建漂亮的URL,但它不会重写Wordpress为您生成的链接。

要解决您的问题,您不必更改mod\\u重写规则。

结束