ここでREGEX-fuの恥ずかしい無知を明らかにしていますが、現在、記事のURLのロードが「article_name」と書かれているのに対し、新しいものは「article-name」と書かれているWebサイトがあります。
それらすべてをダッシュを使用するように移動したいので、古いURLを新しい同等のものに書き換えるために使用できる正規表現はありますか?
よろしくお願いします!
まず、既存のURLで一貫性を実現する必要があります。基本的に、常にダッシュを使用するには、既存のすべての名前を正規化する必要があります。わかりました、あなたはそれをしました。
次の仮定から始めます。
URLはおおよそ次の形式です。
http://example.com/articles/what-ever/really-doesnt_matter/faulty_article_name
ここで、/articles
の下のURLのみを書き換える必要があり、/faulty_article_name
部分のみをサニタイズする必要があります。
Apacheの場合:
RewriteEngine On
RewriteRule ^(/?articles/.*/[^/]*?)_([^/]*?_[^/]*)$ $1-$2 [N]
RewriteRule ^(/?articles/.*/[^/]*?)_([^/_]*)$ $1-$2 [R=301]
これは一般的にGAppleの答えに触発されています。
最初の/?
は、このコードがvhostconfsと.htaccess
ファイルの両方で実行されることを保証します。後者は、先頭のスラッシュを期待していません。
次に、articles/
部分を追加して、ルールが/articles
内のURLにのみ適用されるようにします。
次に、URLに少なくとも2つのアンダースコアがありますが、ルールをループし続けます。アンダースコアが1つしか残っていない場合は、2番目のルールが適用され、ダッシュに置き換えられ、永続的なリダイレクトが行われます。
ふぅ。
これを試して:
RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
最初のルールは、残りが1つ以下になるまで、一度に1つのアンダースコアを置き換えます。次に、最後のルールが最後のアンダースクロールを置き換え、外部リダイレクトを実行します。
考えるべき潜在的な異なるアプローチ:
このアイデアでは、「古い形式」と「新しい形式」が異なるディレクトリにあると想定しています。そうでない場合は、新しい形式に異なるディレクトリ名を付けることを検討してください。
例えば:
http://site.com/articles/2008/12/31/new_years_celebration
http://site.com/article/2008/12/31/new-years-celebration
この場合、mod_rewriteを使用して「古いディレクトリ」内のすべてを検出し、それを「redirector.php
」にリダイレクトできます。
考え直してみますが、mod_rewriteは次のようなものを探すことができます。
RedirectRule /articles/(.*_.*)/redirector.php?article=$1
何かを_
と照合し、リダイレクタを介して送信します。
Redirector.php内で、$_SERVER['REQUEST_URI']
を取得し、preg_replaceやデータベースクエリなどのツールを使用して、リダイレクト先の正しいURLを見つけたり、古いURLへのヒット数を調べたりすることができます。
Mod rewriteは、実際のURLが何であるかをどのように知るのでしょうか?アンダースコアまたはダッシュを使用するようにすべての記事を書き直すことができますが、mod_rewrite
が新しい場所が存在するかどうかを判断する方法はありません。
例えば、
/I_Like_Beesは/path/i_like_bees /I-like-flowersは/path/i-like-flowers として保存されます。
i-like-bees
をi_like_bees
に書き換えます。
i_like_bees
が見つかりませんi-like-flowers
が見つかりませんすべての記事を一貫して保存していれば、書き換えルールを簡単に機能させることができます。代わりに、ディレクトリの存在を確認し、正しい場所に301リダイレクトするスクリプトを作成する必要があります。
メソッドは次のとおりです: http://yoast.com/Apache-rewrite-dash-underscore/
基本的に、URLをアンダースコアの両側のトークンに分割し、アンダースコアを置き換えてトークンを再度書き換えます。問題は、一度に1つのアンダースコアしか置き換えないことです。それはより近いが完全には正しくないURLにリダイレクトし、それは再びさらに近いURLにリダイレクトしますが、おそらくそれでも正しいURLではありません...
アンダースコアとトークンを連続して増やすいくつかの書き換え条件とルールを使用して複数のリダイレクトを修正することをお勧めしますが、これには、最長のタイトルにアンダースコアがあるのと同じ数の条件とルールが必要になります。
ただし、ルールによって変更したくないパス(画像ファイルなど)がそのまま置き換えられる場合があるため、可能であれば修飾子を追加してください。