投稿、ページ、カテゴリ、画像のURLに301リダイレクトを作成しますか?
3 回答
- 投票
-
- 2010-08-30
こんにちは @CJN:、
最初の質問であるWordPressディレクトリの移動は、他のディレクトリとは異なる方法で処理されます.
WordPressをサブディレクトリからルートに移動する:
/wp-config.php
に移動し、以下を定義に追加します(もちろん、example.com
の代わりにクライアントのドメインを使用します):define('WP_SITEURL', 'http://example.com'); define('WP_HOME', WP_SITEURL);
301
を使用してリダイレクトしますtemplate_loader
とwp_safe_redirect()
@ Kau-Boy が示すように、
.htaccess
を変更することで、残りの質問のほとんどを解決できます. . WordPressにはtemplate_redirect
フックがあり、これをwp_safe_redirect()
関数とともに使用して、301
HTTPステータスコードでリダイレクトできます.ご覧のとおり、残りはPHPコードにとっては野蛮であり、正規表現の魔法が少し散りばめられています.このコードは、テーマのfunctions.php
ファイルの実質的にどこにでも配置できます:add_action('template_redirect','my_template_redirect'); function my_template_redirect() { $redirect_to = false; list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']); $path_parts = explode('/',trim($url_path,'/')); switch ($path_parts[0]) { case 'products-directory': $redirect_to = '/products-top-level-page'; break; case 'about-directory': $redirect_to = '/about-top-level-page'; break; case 'services-directory': $redirect_to = '/services-top-level-page'; break; default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { // Do whatever else you need here } } if ($redirect_to) { wp_safe_redirect($redirect_to,301); exit(); } }
SEOだけでなくユーザビリティを検討しますか?
本当に#2をやりたいかどうか聞いてみますか?知覚されたSEO専用に最適化されたサイトよりもユーザーがサイトをはるかに使いにくくするIMO(およびの創設者およびかつての共同主催者として)このグループ私はSEOの初心者ではありません.)URLの最初のセグメントから
"-directory"
を削除するだけでいいのですが.道.とにかくJMTCW.404ページを生成しますか?
404を発行する必要がある場合は、ヘッダーを使用して発行できます:
header("HTTP/1.0 404 Not Found"); exit;
しかし、それはあなたがやりたいことではないと思いますよね?上記のPHP関数を変更し、HTTPリクエストに
301
で応答することで、必要なリダイレクトロジックを実現できると思いますよね?メディアライブラリへの画像のインポートと301リダイレクト
それらをメディアライブラリに移動することができます.そうすることで、それらを前進させることができます.これが役立つかもしれないプラグインです(3.0で動作するかどうかはわかりませんが、そうでない場合はとにかく動作するのに適したコードベースかもしれません):
ハードコーディング画像URL301配列を使用したリダイレクト
次に、 1回限りのため、画像のURLを配列にハードコーディングし、それらを使用してリダイレクト関数で照合することができます.上記のコードからswitchステートメントのデフォルトを変更すると、次のようになります.
default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { $images = array( '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg', '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg', '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg', ); if (in_array($url_path,$images)) { $redirect_to = $images[$url_path]; } else { // Do whatever else you need here } }
preg_match()
を使用してURLパターンで画像を301リダイレクトするもちろん、画像のURLがパターンに従っている場合は、次のように、代わりに
preg_match()
を使用して画像配列の大部分またはすべてを合理化できます.if (preg_match('#^/images/(.*)$#',$url_path,$match)) { $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}"; }
これがお役に立てば幸いですか?
Hi @CJN:,
Your first question, moving the WordPress directory is handled differently from the rest.
Moving WordPress from Subdirectory to Root:
Go into
/wp-config.php
and add the following to defines (using your client's domain instead ofexample.com
of course):define('WP_SITEURL', 'http://example.com'); define('WP_HOME', WP_SITEURL);
301 Redirects using
template_loader
andwp_safe_redirect()
You can solve most of the rest of your questions by modifying
.htaccess
as @Kau-Boy shows how, or you can just do it in PHP. WordPress has atemplate_redirect
hook you can use for this along with thewp_safe_redirect()
function to redirect with a301
HTTP status code. As you can see the rest is just brute for PHP code and a bit of regular expression magic sprinkled in. You can put this code practically anywhere in your theme'sfunctions.php
file:add_action('template_redirect','my_template_redirect'); function my_template_redirect() { $redirect_to = false; list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']); $path_parts = explode('/',trim($url_path,'/')); switch ($path_parts[0]) { case 'products-directory': $redirect_to = '/products-top-level-page'; break; case 'about-directory': $redirect_to = '/about-top-level-page'; break; case 'services-directory': $redirect_to = '/services-top-level-page'; break; default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { // Do whatever else you need here } } if ($redirect_to) { wp_safe_redirect($redirect_to,301); exit(); } }
Consider Usability and Not Just SEO?
I would ask if you really want to do #2? IMO that makes a site a lot less usable for users than one that is optimized solely for perceived SEO (and as founder and one time co-organizer of this group I'm not an SEO neophyte.) I'd much rather see you just drop the
"-directory"
from the first segment of the URL path. JMTCW anyway.Generating 404 Pages?
If you need to issue a 404 you can do it with header:
header("HTTP/1.0 404 Not Found"); exit;
However I think that's not what you want to do, correct? I think you can achieve whatever redirect logic you need by modifying the PHP function above and responding to the HTTP request with a
301
, right?Importing Images into Media Library and 301 Redirecting
You could move them into the media library and doing so would allow you to manage them moving forward. Here's a plugin that might help (although I'm not sure if it is working with 3.0; if not it might be a good code base to work with anyway):
Hardcoding Image URL 301 Redirects using an Array
Then since it would be a one-time thing you could simply hardcode your image URLs into an array and use them to match in your redirection function. Modifying the default in the switch statement from the code above it might look like this:
default: if (preg_match('#same-word(.*)#',$path_parts[0],$match)) { $category = str_replace('.html','',$match[1]); $redirect_to = "/newcategory/{$category}"; } else { $images = array( '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg', '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg', '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg', ); if (in_array($url_path,$images)) { $redirect_to = $images[$url_path]; } else { // Do whatever else you need here } }
Using
preg_match()
to 301 Redirect Images by URL PatternOf course if your image URLs follow a pattern you could streamline much or all of the images array using a
preg_match()
instead, like so:if (preg_match('#^/images/(.*)$#',$url_path,$match)) { $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}"; }
Hope this helps?
-
こんにちはマイク、 いつものように、あなたは素晴らしいです-完全に役に立ち、そして役立つように徹底的に! しかし-これは非常に怖いように見え、phpとコアファイルをいじる限り頭を悩ませるのではないかと心配しています... あなたの答えの最初の部分で、@ Kau-Boyが示すように、私は.htaccessでそれを行うことができるとあなたは言います、それであなたの答えはそれに代わるものです、正しいですか? ポイント#2では、ディレクトリは「/products/」などであり、「-directory」はありません.膨大な数の役に立たないファイルが含まれている、膨大な数の役に立たないディレクトリがあります.簡単な方法で削除したいと思いました.少数のディレクトリ内のトップレベルページを「除くすべて」.Hi Mike, As always, you're amazing - thoroughly helpful and helpfully thorough! But -- this looks very scary and I'm worried I'll get in over my head as far as messing with php and core files... In the first part of your answer you say I can do it with .htaccess as @Kau-Boy shows, so your answer is an alternative to that, correct? On point #2, the directories are just "/products/" etc., no "-directory" -- there are a huge # of useless directories with a huge # of useless files within, I wanted a painless way to get rid of "everything except" the top level page within a small # of directories.
-
そして、re:「404の生成」-404の生成は避けたいのですよね?私は301ですべてを「キャッチ」しようとしています.その考えは、他の301ルールで特定した数ページを「除くすべて」にリダイレクトする簡単な方法である可能性があるというものでした.したがって、これらの数ページを除くすべてを削除してください.ユーザーが404を取得する代わりに、私が設定したホーム/ランダムページにリダイレクトされますか?しかし、それに対処するための賢明な方法ですか? 結局のところ、役に立たないディレクトリの多くには、独自の画像フォルダも含まれているので、それでさらに苦労します... とにかく、私は本当にあなたのすべての助けに感謝します(ここと私があなたに会う他のフォーラムで).And, re: "Generating 404" - I want to avoid generating 404s, don't I? I'm try to 'catch' everything with 301's. That idea was that it might be an easy way to redirect "everything except" the few pages I identify in my other 301 rules-- so delete everything except those few pages; instead of user getting a 404, they get re-directed to home /random page I set? But,is that wise way to deal with it? As it turns out, a lot of the useless directories have their own images folder within also, so more pain with that... Anyway, I truly appreciate all your help (here and on other forums I see you on).
-
@CJN:はい、これは `.htaccess`を使用する代わりになります.後者は、最悪の敵に対しても望まないものです.:)真剣に、PHPは `.htaccess`よりも堅牢なものを書くのがとても簡単です.あなたの質問には '`-directory`が含まれていたので、私は答えに使用しました.私はこれをたくさんやりました、そしてこれはおそらくあなたが行くことができる最も痛みのない方法の1つです.パターンを見つけて、 `if`ステートメント、` switch`ステートメント、正規表現と配列のマッチングにコーディングします.例を別に選んでください、それは本当に非常に簡単です.必要なフォローアップの質問をします.@CJN: Yes this is an alternate to using `.htaccess` the latter which I don't wish even on my worse enemies. :) Seriously, PHP is so much easier to write something robust than with `.htaccess`. Your question included '`-directory` which is why I used in my answer. I've done a lot of this and this is probably one of the most painless ways you can go. Find the patterns and code them into `if` statements, `switch` statements and regular expression and array matching. Just pick the example apart, it really is quite simple. Ask any follow up questions you need.
- 0
- 2010-08-31
- MikeSchinkel
-
@CJN:あなたの質問は、多分あなたがそれらを欲しがっていると私が思ったように表現されましたが、はい、404を避けてください.URLはスラッシュで区切られたパスセグメントのツリーであることを認識し、それを処理するロジックを作成するだけです.分割統治するだけです.そして、つまずいたかどうか尋ねます.見た目は難しいかもしれませんが、他の多くのものと比較することはできませんが、それは単なるブルートフォースの検査とマッピングです.@CJN: Your question was worded such that I thought maybe you wanted them but yes, avoid 404s. Realize that URLs are a tree of path segments separated by slashes and just write logics to handle that; just divide and conquer. And ask if you stumble. While it may look hard it really isn't compare to so many other things, it's just brute force inspection and mapping.
- 0
- 2010-08-31
- MikeSchinkel
-
- 2010-08-29
あるパーマリンク構造から別の構造に変更するためのプラグインがありますが、これではニーズに十分ではないと確信しています.いくつかの.htaccess書き換えルールを使用する必要があります.私はあなたの必要性のためにあなたにいくつかの例を与えるようにしています(それらがすべて正しいかどうかはわかりません).これらすべての行を、サーバーのルートにある「.htaccess」というファイルに含めます.ワードプレスのルールの上にそれを:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On # your rules start here. Keep the following lines that has been produced by wordpress RewriteBase / RewriteRule wp/(.*)$ /$1 [R=301] RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301] RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301] RewriteRule /services-directory/$ /services-top-level-page [R=301] RewriteRule /same-word(.*)$ /newcategory/$1 [R=301]
フラグ[R=301]は、クライアントブラウザまたは検索エンジンに永続的なリダイレクトであることを通知します.
WordPressデータベース内のすべてのパーマリンクを更新することをお勧めします.
データベース内の文字列の更新に関する記事を作成しました.残念ながら、私はまだ投稿を翻訳していません.ただし、クエリは明確である必要があります.それ以外の場合は、MySQLドキュメントを使用してください. There is a plugin for changing from one permalink struture to another, but I am quite sure that this will not be enough for your needs. You will have to use some .htaccess rewrite rules. I try to give you some examples for your need (not sure if they are all correct). Include all those lines into a file called ".htaccess" in the root of your server. Out it above of the wordpress rules:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On # your rules start here. Keep the following lines that has been produced by wordpress RewriteBase / RewriteRule wp/(.*)$ /$1 [R=301] RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301] RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301] RewriteRule /services-directory/$ /services-top-level-page [R=301] RewriteRule /same-word(.*)$ /newcategory/$1 [R=301]
The flag [R=301] will tell the client browser or search engine, that it is a permanent redirect.
You will probably want to update all the permalinks within your wordpress database. I wrote an article about updating string in the database. Unfortunately I haven't translated the post, yet. But the queries should be clear, otherwise just use the MySQL docs.
-
男の子、 どうもありがとう.私は正しい考えを持っていたようですが、「(すべてが正しいかどうかはわかりません)」と言っているのでわかりにくいです.パーマリンクを処理するためにデータベースにアクセスすることを心配する必要はないと思います.私はワードプレスを適切に設定していて、それをうまく処理しています. チャイムを鳴らしてくれてありがとう-私は今、より自信を持っています.boy, Thanks very much. It looks like I might have had the right ideas - but hard to tell because you say "(not sure if they are all correct)". I don't think I'll need to worry about getting into the database to deal with permalinks. I have wordpress set up appropriately and have a good handle on that. Thanks again for chiming in - I feel more confident going forward now.
-
- 2010-08-31
私はこれを使用します: Simple 301 Redirects プラグイン-数ページ前に、WPファイル内のすべてのファイルとフォルダーを含むWebデザインサイトを間もなく移動します.
I use this: Simple 301 Redirects plugin - used it for a few pages prior, and I am soon to move my web design site with all it's files and folders inside of my WP files.
ここで質問するには多すぎるのではないかと心配しています.その場合は、別の学習場所を教えてください.
リダイレクトのヘルプ
開発が不十分なサイトをクリーンアップし、サブディレクトリからワードプレスを移行しています.リダイレクトと正規表現のロジスティクスに頭を悩ませようと何時間も費やしました.私はそれを理解していると思いますが、私がこれを正しく行っていることの確認と、ベストプラクティスに関するアドバイスをいただければ幸いです.ハウツーの例を含む優れたチュートリアルを誰かが知っているなら、それもありがたいです.
このための本当に簡単なプラグインを誰かが知っているなら、私は非常に感謝しています. Redirectionsプラグインを見てきましたが、非常に混乱します(頭痛の種です!).いずれにせよ、以下の私のアイデア(ソースの後に=gt;次にターゲット)は、リダイレクトの手順とスクリーンショット、および私が精査した他のチュートリアルから収集したものです. .htaccessファイルに直接配置するか、リダイレクトや別のプラグインを使用するかに関係なく、それらが適用可能であると確信しています.
それで、これが私が達成しようとしていることと、それを行う必要があると私が考える方法です:
Wordpressをサブディレクトリからルートに移動するには:
現在ルートのサブディレクトリ内にあるすべてのページについて、一連のページを削除したり、1つのトップレベルページに結合したりしたい:
特定のパターンに一致する一連のトップレベルのページについて、特定のカテゴリに分類したいと思います.ファイル名はすべて、same-word-variation-variation.htmlのような同じ2つの単語で始まり、既存のファイル名を保持したいのですが、パーマリンクを `.html`で終わるように設定すると、これは機能します. 、私は信じています:
`.html`で終わるパーマリンクがない場合、どのようにルールを作成しますか? (私が見たと思います!は「not」文字ですが、ここでの使用方法はわかりません-そうですか):
次に、上記のように特定のページを識別してリダイレクトしたら、残りのすべて(ゴミ)を削除し、ユーザーをホームページ(またはランダムな投稿?)に送りたいと思います.
では、ここに2つの質問があります:
「上記のように既にリダイレクトされているファイルを除くすべてについて、これを行う」というルールを作成するにはどうすればよいですか.
これから作成する新しいページや投稿にそのルールが適用されないようにするにはどうすればよいですか?
1つのアイデアは、削除すると404ページが見つからないため、404ページ自体のルールを作成する必要があるということです.それが私がやりたいことですか?
私が言ったように、サイトはひどく開発されています(クライアントが適切なアーキテクチャやSEOなどに関係なく単に「ページを投げる」ように人々に指示している)-それは事実上ランキングや外部を持っていません/心配するバックリンクですが、SEOと適切な開発の観点から最善のアプローチを理解したいと思います.
すべてのガイダンスを事前に感謝します.