Почему мой mod_rewrite не работает?

Хорошо У меня есть сайт WP, использующий структуру постоянной ссылки в /%category%/%postname%/

Я построил его в виде шаблонов страниц, используя запросы категорий внутри, т. Е.

страниц 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(); ?> 

страниц 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, и просто запросил сообщения в категории новостей. * -Это хорошо в моем случае, потому что новости есть, и только когда-либо будет архивироваться содержимое.

Моя категория новостей (последние новости) является дочерью категории (около), поэтому, когда я перехожу в раздел новостей, URL-адрес:

www.example.com/about/latest-news/

На странице новостей используется следующий код для перечисления архивов;

 <!-- 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/latest-news/2000

www.example.com/about/latest-news/2001

Я изменил .htaccess в маршруте WP:

 # 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 перезаписывает ее.

Любая помощь могла бы быть полезна.

Во-первых, ваша дополнительная линия приходит слишком поздно. Правило перед тем, как поймать все, что вы хотите совместить. Во-вторых, это не то, что вы хотите. Ваш …

 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_rewrite для этого. Попробуйте следующую строку над блоком перезаписи:

 RedirectMatch Permanent ^/(\d\d\d\d)/?$ /about/latest-news/$1 

Вы должны сообщить WordPress о своих постоянных постоянных архивах. Вы должны найти достаточно хороших примеров под тегом.

Если вы используете WordPress без mod_rewrite ( docs ), все URL-адреса похожи на myblog.com/index.php?p=12 . С mod_rewrite вы можете создавать симпатичные URL-адреса, например myblog.com/mypost . Как это работает, Apache внутренне переписывает url myblog.com/mypost на myblog.com/index.php?p=12 , прежде чем передать запрос на WordPress.

Поэтому mod_rewrite используется для создания хороших URL-адресов для вашего блога, но он не будет переписывать ссылки, которые WordPress генерирует для вас.

Чтобы решить вашу проблему, вам не нужно менять правила mod_rewrite.