「page-title」の部分は元の URL の一部ではなく、id「123」に対応する mysql テーブルからの情報であるため、古い URL を新しい URL に 301 リダイレクトするにはどうすればよいですか?
必要な唯一の書き換えルールは、見栄えの良い URL をview.php
にルーティングすることです。これは既に取得済みのように思えます。おそらく次のようになります。
RewriteCond %{REQUEST_FILENANE} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/([^/]+)\.html /view.php?id=$1 [L]
そのリクエストが届いview.php
たら、変数を確認できます。$_SERVER['REQUEST_URI']
それは のようになります'/123/page-title.html'
。それを見ると、コンテンツを提供するだけで完了です。
ただし、 が のようにview.php
見える場合は、見栄えの良い URL ではなく、誰かがそのページを要求したことがわかります。これが発生した場合、 はのサニタイズされた値を使用してデータベースからページ タイトルを検索し、リダイレクトを作成する必要があります (これはすべて、ブラウザに何かが出力される前に行う必要があります)。$_SERVER['REQUEST_URI']
'/view.php?id=123'
http://mysite.com/view.php?id=123
view.php
$_GET['id']
何かのようなもの:
header('HTTP/1.1 301 Moved Permanently');
header('Location: /' . $id . '/' . urlencode($page-title) . '.html');
exit();
これにより、ブラウザがページにリダイレクトされますhttp://mysite.com/view.php?id=123
。htaccess には他に何も必要ありません。