いくつかのワードプレスのインストールのように、IDが含まれていない(書き直された)URLがよく見られます。これを達成するための最良の方法は何ですか?例:site.com/product/some-product-name/ページ名とIDの配列をキャッシュに保持して、すべてのページリクエストでのDBクエリを回避するのではないでしょうか。競合を回避する方法、およびIDなしでURLを使用する際のその他の問題は何ですか?
4 に答える
IDを使用すると、実際には同じ難問が発生します。データベースで別の値をチェックしているだけです。上記のURLの「some-product-name」の部分もユニークなものです。一部の人々はそれらをナメクジと呼びます(Wordpress、パーマリンクも)。したがって、特定のIDを持つ行をデータベースに照会する代わりに、特定のスラッグを持つ行をデータベースに照会します。レコードを取得するためにIDを知る必要はありません。
製品名が一意である限り、問題になることはありません。列にインデックスが付けられている限り、数値IDよりも一意の名前で製品を検索するのに時間がかかりません(少なくとも重要ではありません)。
Wordpressには、スラッグのwp_postsテーブルにフィールドがあります。投稿を作成すると、投稿のタイトルからスラッグが作成され(そのように構成されている場合)、スペースがダッシュに置き換えられます(またはアンダースコアに設定できると思います)。また、アポストロフィやコンマなども削除します。スラッグの全長も制限されると思います。
つまり、URLを投稿のタイトルに動的にデコードするわけではありません。テーブルには、投稿名のURLバージョンと直接一致するフィールドがあります。
ご存じかもしれませんが、URL は Apache のmod_rewriteモジュールで書き換えられています。ここで述べたように、Wordpress はバックグラウンドで、タイトルまたは投稿名をサニタイズした後にスラッグを割り当てています。
しかし、あなたの質問に答えるために、あなたが説明しているのはWordpressの「Pretty Permalinks」機能であり、Wordpress codexで詳細を学ぶことができます. 新しいバージョンの Wordpress は内部で書き換えを行います (.htaccess editinではなく、代わりにwp_rewrite )。これが、どのパーマリンク構造に対しても同じルールセットが表示される理由です。
ただし、掘り下げれば、古い書き換えルールを見つけることができます。例えば:
RewriteRule ^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3 [QSA,L]
のような URL を受け取り、/2008/01/01/
そこに/index.php?year=2008&monthnum=01&day=01
転送します (そして、日付カテゴリを読み込みます)。
しかし、前述のように、このようなページがproduct-name
存在するのは、Wordpress が投稿のタイトルを既にサニタイズし、それをフィールドとしてデータベースに保存したからにすぎません。