0

何時間も正規表現について読んで試した後、私は助けを求める時が来たと信じています..

最近、古い記事を別の CMS と新しいデータベースにインポートすることで、かなり大きな Web サイトを移行しました。URL 構造はかなり異なります。

古い URL の構造はhttp://wwww.myurl.com/categoryOLD/article_12345.fixed/this_is_the_title.htmlです。

/article_12345.fixed/ と書かれている部分は、最後の .html 部分と同じように、すべての古い URL に存在するものです。12345 はエントリの ID で、URL ごとに異なります。これを利用して、書き換えが必要な URL を特定できると思います。

古い URL をhttp://wwww.myurl.com/categoryNEW/this-is-the-titleに書き換える必要があります

/article_12345.fix/ がなくなり、古いカテゴリが新しいカテゴリに書き直され、末尾の .html がなくなり、アンダースコアがハイフンになる必要があります。

私は読んで試してみましたが、 RewriteCond を一致させることさえできません。正規表現で夢を見て、ここで私を助けてくれる人はいますか?

4

3 に答える 3

1

アンダースコアをハイフンに書き換えるには、RewriteRuleの [N] フラグを使用できます。

RewriteRule ^([^_]+)_(.*) $1-$2 [N,DPI]

これを他のルールの前に配置して、新しい URL で機能するようにします。

次に、残りを書き換える RewriteRule は次のようになります。

RewriteRule ^\/?(.*?)\/(.*?)\/(.*)\.html$ $1/$3

Max Leske が述べたように、ID ベースの書き換えの場合は、おそらく RewriteMap が最適なソリューションです。

于 2013-05-26T10:24:31.757 に答える
0

私は最終的に以下を使用しました:

RewriteEngine On
RewriteRule ^([^_]+)__(.*)\.html$ $1_$2.html [N,DPI]
RewriteRule ^([^_]+)_(.*)\.html$ $1-$2.html [N,DPI]
RewriteRule ^(.*)cat1old/(.*)\.html$ $1cat1new/$2.html
RewriteRule ^(.*)cat2old/(.*)\.html$ $1cat2new/$2.html
RewriteRule ^(.*)cat3old/(.*)\.html$ $1cat3new/$2.html
RewriteRule ^(.*)cat4old/(.*)\.html$ $1cat4new/$2.html
RewriteRule ^\/?(.*)\/(.*)\/(.*)(-?)\.html$ $1/$3 [R=301,L]

魔法のように動作します!助けてくれてありがとう

于 2013-05-27T15:38:37.500 に答える