Преобразование динамических URL в статические. Примеры из практики

Файл .htaccess

RewriteEngine on
RewriteBase /
RewriteRule ^.htaccess$ - [F]
#
#(ru|en|ua) — обозначает языковый раздел, это значение определяется как $1
#([0-9]) — обозначает дату новости, это значение определяется как $2
#
RewriteRule ^(ru|en|ua)/news/([0-9])$ $1/news/$2/ [R]
RewriteRule ^(ru|en|ua)/news/([0-9])/$ $1/news/index.php?year=$2

RewriteRule ^([a-z]+)/news/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ $1/news/$2/$3/ [R]
RewriteRule ^([a-z]+)/news/([A-Za-z0-9]+)/([A-Za-z0-9]+)/$ $1/news/index.php?year=$2&month=$3

RewriteRule ^([a-z]+)/news/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ $1/news/$2/$3/$4/ [R]
RewriteRule ^([a-z]+)/news/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/$ $1/news/index.php?year=$2&month=$3&day=$4

RewriteRule ^([a-z]+)/drugs/catalogue/([-a-z]+)$ $1/drugs/catalogue/$2/ [R]
RewriteRule ^([a-z]+)/drugs/catalogue/([-a-z]+)/$ $1/drugs/catalogue/index.php?ctg=$2

RewriteRule ^([a-z]+)/drugs/catalogue/([-a-z]+)/([-a-z]+)$ $1/drugs/catalogue/$2/$3/ [R]
RewriteRule ^([a-z]+)/drugs/catalogue/([-a-z]+)/([-a-z]+)/$ $1/drugs/catalogue/index.php?ctg=$2&prod_id=$3

Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^hostname.ua$ [NC]
RewriteRule ^(.*)$ //www.hostname.ru/$1 [R=301,L]

Файл content. php

<?php
include($_SERVER['DOCUMENT_ROOT']."/inc/opendb.php");
include($_SERVER['DOCUMENT_ROOT']."/inc/drugs/ini.php");
$link = $page_lng.'/drugs/catalogue/';
$leave_comment = '/'.$page_lng.'/drugs/opinions/leave-comment/';
$read_comments = '/'.$page_lng.'/drugs/opinions/';
// переменные 'ctg' и 'prod_id' задаются в файле .htaccess
if ((empty($_GET['ctg'])) and (empty($_GET['prod_id']))) $status = 'root';
if ((!empty($_GET['ctg'])) and (empty($_GET['prod_id']))) $status = 'extended';
if ((!empty($_GET['ctg'])) and (!empty($_GET['prod_id']))) $status = 'product';
if ($status == 'root') // список категорий
{
//$content = '<table>';
$content = '<div>';
// создание списка категорий
$query_all_ctg = "SELECT category_id, category_name_".$page_lng.", urlname FROM category ORDER BY category_order ASC";
$result_all_ctg = mysql_query($query_all_ctg) or die('Error: '.mysql_error());
while($row_all_ctg = mysql_fetch_array($result_all_ctg, MYSQL_NUM))
{	list($category_id, $category_name, $urlname) = $row_all_ctg;
// подсчет препаратов в текущей категории
$query_amount_of_drugs_in_category = mysql_query("SELECT COUNT(*) as rec FROM products WHERE category = ".$category_id." AND catalogue = 1");
$fetch_in_category = mysql_fetch_row($query_amount_of_drugs_in_category);
// всего препаратов в каждой группе
$amount_of_drugs_in_category = $fetch_in_category[0];
$content .= '<h2><a href="/'.$link.$urlname.'/">'.$category_name.'</a> <span><sup>'. $amount_of_drugs_in_category.'</sup></span></h2>';
// выборка препаратов для текущей категории
$query_all_drugs = "SELECT * FROM products WHERE category = ".$category_id." AND ad = 1 ORDER BY name_".$page_lng." ASC";
$result_all_drugs = mysql_query($query_all_drugs) or die('Error: '.mysql_error());

// выводим препараты для текущей категории
while($row_all_drugs = mysql_fetch_array($result_all_drugs, MYSQL_ASSOC))
{
$content .= '<div>';
//		$img_path = '/i/drugs/'.$_GET['ctg'].'/'.$row_all_drugs["urlname"].'/'.$row_all_drugs["urlname"].'-'.$page_lng.'-m.jpg';
 // ЭТО ЕЩЕ НАДО ИСПРАВИТЬ !!!

$img_path = '/i/drugs/'.$urlname.'/'.$row_all_drugs["urlname"].'/'.$row_all_drugs["urlname"].'-'.$page_lng.'-m.jpg'; // ЭТО ЕЩЕ НАДО ИСПРАВИТЬ !!!
$img = '<a href="'.$urlname.'/'.$row_all_drugs['urlname'].'/"><img src="'.$img_path.'"  alt="'.$row_all_drugs['name_ru'].' TM&nbsp;Vishpha" >';		$content .= $img;
$content .= '<p>'.$row_all_drugs['name_ru'].'</p></a></div>';	}}//$content .= '</table>';	$content .= '</div>';}
/*	Текущяя категория*/
if ($status == 'extended')
// развернутый список текущей категории
{	
// извлечение инфо о текущей категории
$query_current_ctg = "SELECT * FROM category WHERE urlname='".$_GET['ctg']."'";
$result_current_ctg = mysql_query($query_current_ctg) or die('Error: '.mysql_error());
$row_current_ctg = mysql_fetch_array($result_current_ctg, MYSQL_ASSOC);	
mysql_free_result($result_current_ctg);
 // номер текущей категории
$current_id_ctg = $row_current_ctg['category_id'];
 // заголовок страницы с текущей категории
$page_title = $row_current_ctg['category_name_ru'];
// выводим препараты для текущей категории
$query_all_drugs = "SELECT * FROM products WHERE category = ".$current_id_ctg." AND catalogue = 1 ORDER BY name_".$page_lng." ASC";
$result_all_drugs = mysql_query($query_all_drugs) or die('Error: '.mysql_error());
//	$content .= '<ul>';
$content .= '';
$i = 0; // счетчик для опредления наличия картинок, если их нет, заполняется <br />-ами	while($row_all_drugs = mysql_fetch_array($result_all_drugs, MYSQL_ASSOC))	{		$content .= '<div>';
// ЭТО ЕЩЕ НАДО ИСПРАВИТЬ !!!
$img_path = '/i/drugs/'.$_GET['ctg'].'/'.$row_all_drugs["urlname"].'/'.$row_all_drugs["urlname"].'-'.$page_lng.'-m.jpg'; 
$img = '<a href="'.$row_all_drugs['urlname'].'/"><img src="'.$img_path.'"  alt="'.$row_all_drugs['name_ru'].' TM&nbsp;Vishpha" >';
$content .= $img;
$content .= '<p>'.$row_all_drugs['name_ru'].'</p></a></div>';
$i++;
}
if ($i == 0) $content = '<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />';
//	$content .= '</ul>';
$content .= '';
}
/*	Описание выбранного препарата*/
if ($status == 'product')
// описание выбранного препарата
{
$query_current_drug = "SELECT * FROM products WHERE urlname='".$_GET['prod_id']."'";
$result_current_drug = mysql_query($query_current_drug) or die('Error: '.mysql_error());
$row_current_drug = mysql_fetch_array($result_current_drug, MYSQL_ASSOC);
$current_drug_id = $row_current_drug["id"];
$page_title = $row_current_drug["name_".$page_lng];
// изображение 400x400 px
$img_path = '/i/drugs/'.$_GET['ctg'].'/'.$row_current_drug["urlname"].'/'.$row_current_drug["urlname"].'-'.$page_lng.'.jpg';
$img = '<div><img src="'.$img_path.'" alt="'.$row_current_drug["name_".$page_lng].' TM&nbsp;Vishpha" height="400" width="400" /> 				<div>					<div>						<div>							<div>								<a onClick="return popup_window_url('."'".$leave_comment."'".',750,630)" href="'.$leave_comment.'"><ins><ins></ins></ins><p>Оставить отзыв о препарате</p></a>								<a href="'.$read_comments.'"><ins><ins></ins></ins><p>Почитать отзывы</p></a>						  </div>							</div>						<ins><ins></ins></ins>						<ins><ins></ins></ins>						<ins>							<ins><ins></ins></ins>							<ins><ins></ins></ins></ins>						</div>					<ins><ins></ins></ins>				</div>			</div>';		$content .= $img;		$content .= '<h2>Инструкция по&nbsp;медицинскому применению препарата</h2>';
if (!empty($row_current_drug["instruction_".$page_lng]))	$content .= $row_current_drug["instruction_".$page_lng];		if ($row_current_drug["price"] <> 0)	$content .= '<p><strong>'.$price.'.</strong> '.number_format($row_current_drug["price"],2,',','').' '.$currency.'</p>';
mysql_free_result($result_current_drug);}
?>
Понравилась статья? Поделиться с друзьями:
Комментариев: 1
  1. Евгений

    спасибо хороший обзор, а в файле htaccess еще и редирект прописан, так что супер полезный скрин получился.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Перейти к верхней панели