「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=123view.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 には他に何も必要ありません。