(WebサーバーとしてApacheを使用していると仮定します)
非常によく似た質問については、この回答をご覧ください:https ://stackoverflow.com/a/8030760/851273
ここでの問題は、.htaccessとmod_rewriteがページ名をart_idにマップする方法を知らないため、これを行うには2つの方法があります。
- にいくつかの機能を追加
read.php
して、同様のルックアップを実行できるようにすることができますが、代わりに、または何かart_id
を使用します。art_title
基本的に、データベース(または記事が保存されている場所)のバックエンドルックアップを実行し、IDの代わりにタイトルをキーとして使用する必要があります。非ASCII文字や予約文字(?
たとえば)などのタイトルに奇妙な文字が含まれる可能性があるため、これは少し厄介です。したがって、データベースからタイトルを引き出すとき、または使用するときに、タイトルエンコーダーとデコーダーを作成する必要があります。データベース内の記事を検索するためのタイトル。
サーバー構成またはvhost構成にアクセスできる場合は、外部プログラム(prgタイプ)を使用してRewriteMapをセットアップし、タイトルからIDへのルックアップを実行するphpスクリプトを作成できる場合があります。次に、次の行に沿って何かを実行する書き換えルールを.htaccessに作成できます。
RewriteRule ^blog/(.*)$ /blog/read.php?art_id=${title-to-id:$1} [L]
きれいなURLから記事のタイトルを抽出し、それをtitle-to-idという書き換えマップにフィードしてart_idを取得します。ここでも、タイトルエンコーダー/デコーダーを設定して、タイトルに非ascci文字と予約文字が処理されるようにする必要があります。
あなたができるもう一つのことは、あなたのきれいなURLに記事IDを貼り付けて、それらが次のようになるようにすることです:http: //mywebsite.com/blog/11-Why-do-Australians-pay-so-much-for-Cars。これは、リンクが何であるかを確認するのはまだかなり簡単で、SEOに対応しており、タイトルからIDへのルックアップを行う必要がありません。書き換えルールも同様に簡単になります。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# add whatever other special conditions you need here
RewriteRule ^blog/([0-9]+)-(.*)$ /blog/read.php?art_id=$1 [L]
以上です。もちろん、すべてのブログURLを次の形式で生成する必要がhttp://(host)/blog/(art_id)-(art_title)
あります。また、タイトルから特殊文字を削除する必要がありますが、翻訳するための追加のコードを書くことを心配する必要はありません。タイトルをIDに戻します。