web-dev-qa-db-ja.com

Mod_rewriteが機能しないのはなぜですか?

/%category%/%postname%/のパーマリンク構造を使ったWPサイトがあります

内部でカテゴリクエリを使用して、ページテンプレートの方法で作成しました。

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.phppage-news.phpと同じレイアウトにすることによってこれを行いましたそしてニュースカテゴリの投稿を検索するだけです。 * - これは私の場合は問題ありません。ニュースがあるからです。アーカイブされるコンテンツはこれまでにないでしょう。

私のニュースカテゴリ(latest-news)はaboutカテゴリ(about)の子供なので、ニュースセクションに行くと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

これにWPルートの.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

書き直しが間違っているかどうか、別の場所に書き換えているかどうか、またはWordPressが上書きしているかどうかを知らないという問題があります。

どんな助けでも本当に感謝されるでしょう。

1
danixd

まず、追加行が遅すぎます。前の規則はあなたがマッチしたいすべてを捉えます。第二に、それはあなたが望むものではありません。きみの …

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に伝えなければなりません。タグの下に十分な例があります。

1
fuxia

Mod_rewrite( docs )なしでWordpressを使用する場合、すべてのURLはmyblog.com/index.php?p=12のようになります。 mod_rewriteを使えば、myblog.com/mypostのようにかわいいURLを作成できます。これがどのように機能するかというと、ApacheはリクエストをWordpressに渡す前に、内部でURL myblog.com/mypostmyblog.com/index.php?p=12に書き換えます。

だからmod_rewriteはあなたのブログのためのかわいいURLを作成するために使われます、しかしそれはあなたのためにWordpressが生成するリンクを書き換えません

あなたの問題を解決するために、あなたはmod_rewriteルールを変更する必要はないはずです。

1
Wietse Venema