[簡易説明]動的なページを静的なURLでアクセス出来るようにする

動的なページを静的なURLでアクセス出来るようにする

SEO対策になるのかは自身では実感がないがやってて損はなさそうなので実装してみた
意外に実装に手間取り、がっちりやると説明しきれないのでとりあえずこうすれば実現できる
すっごく簡単なサンプルコード及び手順

■要件
レシピサイトである

レシピに属するカテゴリ一覧ページ【list.php】がある

http://【ドメイン名】/category/list.php?category_name=meet

といった感じでアクセスすると肉料理一覧が表示される

これを下記の様にアクセスしてページを表示する

http://【ドメイン名】/category/meet.html

さらに下層に牛肉料理一覧とあった場合は

http://【ドメイン名】/category/meet/beef.html

でアクセス出来るようにする

■手順

・.htaccessでルールを記述する
・データベースにSEO対策したいデータを用意する(ここでは配列で擬似的に用いる)
・アクセスされたパラメーターを元にデータをセットしていく
・ページを表示する
AddHandler php5.3-script .htm .html


RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^category/(.+).html$   category/list.php?category_name=$1 [L]
従来のアクセス【category/list.php?category_name=$1】を【^category/(.+).html】に変換する
URLがページで有ることをわかりやすくするために【.html】をつけるといいらしい
<?php
// ※1
$categories = array(
	array(
		'id'=>1,
		'category_name'=>'meet',
		'name'=>'肉料理',
		'title'=>'サンプルサイト - 肉料理',
		'description'=>'肉を使った料理',
		'keywords'=>'レシピ, 肉料理',
		'path'=>'/meet.html',
	),
	array(
		'id'=>2,
		'category_name'=>'meet/beef',
		'name'=>'牛肉料理',
		'title'=>'サンプルサイト - 牛肉料理',
		'description'=>'牛肉を使った料理',
		'keywords'=>'レシピ, 牛肉料理',
		'path'=>'/meet/beef.html',
	),
	array(
		'id'=>3,
		'category_name'=>'meet/pook',
		'name'=>'豚肉料理',
		'title'=>'サンプルサイト - 豚肉料理',
		'description'=>'豚肉を使った料理',
		'keywords'=>'レシピ, 豚肉料理',
		'path'=>'/meet/pook.html',
	),
	array(
		'id'=>4,
		'category_name'=>'fish',
		'name'=>'魚料理',
		'title'=>'サンプルサイト - 魚料理',
		'description'=>'魚を使った料理',
		'keywords'=>'レシピ, 魚料理',
		'path'=>'/fish.html',
	),
	array(
		'id'=>5,
		'category_name'=>'meet/beef/beefsteak',
		'name'=>'牛肉ステーキ',
		'title'=>'サンプルサイト - 牛肉ステーキ',
		'description'=>'牛肉を使った料理 ステーキ',
		'keywords'=>'レシピ, 牛肉料理, ステーキ',
		'path'=>'/meet/beef/beefsteak.html',
	),
);

$data = '';

// ※2
foreach($categories as $category)
{
	if($_REQUEST['category_name'] == $category['category_name'])
	{
		$data = $category;
		break;
	}
}

?>

<!DOCTYPE html>
<html lang="ja">
	<head>
		<meta charset="utf-8">
		<meta name="keywords" content="<?php echo $data['keywords']; ?>">
		<meta name="description" content="<?php echo $data['description']; ?>">
		<title><?php echo $data['title']; ?></title>
	</head>
	<body>
		<ul>
			<?php // ※3?>
			<?php foreach($categories as $category):?>
			<li><a href="/category<?php echo $category['path']; ?>"><?php echo $category['name']; ?></a></li>
			<?php endforeach; ?>
		</ul>
		<?php // ※4?>
		<h3><?php echo $data['name']; ?>のページ</h3>
	</body>
</html>

※1:
この配列はデータベースで定義したりする

※2:
パラメータ【category_name】が配列の中に存在していればデータを格納する

※3:
配列で定義されているリンクを生成する

※4:
現在表示されているページ名を表示する

■実行画面
肉料理ページ
other_010

牛肉料理ページ
other_011

魚料理ページ
other_012

牛肉ステーキページ
other_013

Comments are closed.