htaccessリダイレクトが使えない環境の場合、MetaリダイレクトHTMLを大量に生成することがあります。すでにNode.jsでローカルサーバーを立てていれば、Node.jsでリダイレクトHTMLを生成すると楽です。
リダイレクト元とリダイレクト先一覧
エクセルでリダイレクト元とリダイレクト先のURL一覧を用意します。
※大規模なサイトリニューアルでは、URL一覧がエクセルで管理されていることが多かったので、エクセルを起点にしています。
Node.jsアプリの作成
Node.jsで実行するアプリをredilect.jsという名前で作ります。
redilect.jsはリダイレクトさせたいローカルサイトのルートに配置します。
コードは下記です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
const fs = require('fs'); const data = `/xxxxx/old/1.html /xxxxx/new/1.html /xxxxx/old/2.html /xxxxx/new/2.html /xxxxx/old/3.html /xxxxx/new/3.html /xxxxx/old/4.html /xxxxx/new/4.html /xxxxx/old/5.html /xxxxx/new/5.html /xxxxx/old/6.html /xxxxx/new/6.html /xxxxx/old/7.html /xxxxx/new/7.html /xxxxx/old/8.html /xxxxx/new/8.html /xxxxx/old/9.html /xxxxx/new/9.html /xxxxx/old/10.html /xxxxx/new/10.html /xxxxx/old/11.html /xxxxx/new/11.html /xxxxx/old/12.html /xxxxx/new/12.html /xxxxx/old/13.html /xxxxx/new/13.html /xxxxx/old/14.html /xxxxx/new/14.html /xxxxx/old/15.html /xxxxx/new/15.html`; let line = data.split("\n"); let getHtmlTitle = (url) => { let html = fs.readFileSync('.' + url, 'utf8'); let title = html.match(/<title[\s\S]*?title>/)[0]; return title; }, makeRedirect = (title, url) => { return `<!doctype html> <html> <head> <meta charset="utf-8"> ${title} <meta http-equiv="refresh" content="0;URL=${url}"> </head> <body> </body> </html>`; }; for(let i = 0; i < line.length; i++){ let html, title; line[i] = line[i].split("\t"); title = getHtmlTitle(line[i][0]); html = makeRedirect(title, line[i][1]); fs.writeFileSync('.' + line[i][0], html); } |
const dataに、エクセルのリダイレクト一覧データをコピペします。
コマンドプロントやターミナルで「node redilect.js」を実行すると、リダイレクト元ファイルが置き換わっていきます。
※リダイレクト元ファイルは上書きしてしまうので、必要に応じてバックアップをしてください。
出力したリダイレクトファイル
1 2 3 4 5 6 7 8 9 |
<html> <head> <meta charset="utf-8"> <title>既存のタイトル</title> <meta http-equiv="refresh" content="0;URL=リダイレクト先URL"> </head> <body> </body> </html> |
0秒で新しいページにリダイレクトされるHTMLが生成されました。
もし、出力したいHTMLテンプレートを変更したい場合、redilect.jsのmakeRedirect()内を修正すれば可能です。