Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Правильное написание .htaccess

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужно сделать переход по пунктам меню используя ЧПУ
mobilandser
Отправлено: 23 Марта, 2017 - 09:16:12
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Доброго времени суток.
Ребята - такая беда: делаю свою CMS с ЧПУ (человеко-понятный урл)
То есть что бы ссылки вида index.php?category=blablabla&page=bla1bla1 преобразовать в
имя сайты/blablabla/bla1bla1

для этих целей сделал .htaccess такого вида:

AddDefaultCharset UTF-8
ErrorDocument 403 "<BODY><H1>Forbidden</H1>
ErrorDocument 404 /errors/404.html
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9\-\_]+)$ ?category=$1 [L]
RewriteRule ^([a-z0-9\-\_]+)/$ ?category=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z0-9\-\_]+)/([^/]+)$ ?category=$1&content=$2 [L]
RewriteRule ^([a-z0-9\-\_]+)/([^/]+)/$ ?category=$1&content=$2 [L]
RewriteRule ^.$ ./index.php [QSA,L]

Хотел сделать такую тему:
Изначально когда я захожу по ссылке на какой-то пункт меню - я попадаю:
имя сайта/пункт меню и тут отображаються краткие обзоры статей из категории "пункт меню". Это сделал - тут все вроди хорошо. После того, как я нажал на подробнее я попал на страницу вида: имя сайта/пункт меню/страница
Есть пролема, когда я после этого нажимаю на другой пункт меню, то есть выбираю другую категорию я почему-то попадаю на страницу: имя сайта/пункт меню/другой пункт меню хотя я должен попасть на имя сайта/другой пункт меню

Нужна помощь - никак не могу победить такую штуку. Помогите плиз. Да, кстати, если поможет: все ссылки меню у меня вида /ссылка пункта меню, то есть если смотреть код, то выглядит это так:

public function tplMenu($category, $id_active){ //Шаблон для вывода меню в виде дерева
if ($id_active == $category['link_page']) $menu = '<li class = "active"><a href="'.$category['link_page'].'"> '.$category['name_menu'].'</a>';
else $menu = '<li><a href="'.$category['link_page'].'"> '.$category['name_menu'].'</a>';
if(isset($category['childs'])) $menu .= '<ul>'. $this->showCat($category['childs'], $id_active) .'</ul>';
$menu .= '</li>';
return $menu;
}
(Добавление)
Да и еще одна функция:

public function showCat($data, $id_active){
$string = '';
foreach($data as $item) $string .= $this->tplMenu($item, $id_active);
return $string;
}
 
 Top
andrewkard
Отправлено: 23 Марта, 2017 - 09:39:25
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Как пример:
Перенаправляем все запросы на index.php в .htaccess
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteEngine On  
  3. RewriteCond %{SCRIPT_FILENAME} !-d  
  4. RewriteCond %{SCRIPT_FILENAME} !-f  
  5. RewriteRule ^(.*)$ ./index.php?route=$1
  6.  


А далее создаете роутинг, который разбивает $_GET['route'] на части по '/'. И в итоге Вы получите:
parts[0] = имя контролера
parts[1] = имя действия
parts[2] = id
Это общий пример, в Вашем случае это может быть
parts[0] = категория
parts[1] = страница
 
 Top
mobilandser
Отправлено: 23 Марта, 2017 - 10:02:09
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Ну все правильно - у меня все так и организовано.
Но вы видимо не поняли вопрос:
Переходы по меню осуществляються нормально, если только бегать по категориям, но если зайти на уже саму страницу новости то есть ссылка вида: site.ru/category/full_news
то от сюда уже по категориям ходить не получаеться, так как почему-то я попадаю постоянню сюда: site.ru/category/category1 где category1 категория которую я выбрал из пукнта меню. А должно быть вот так: site.ru/category1
Я имею в виду, что когда я бегаю по пунктам меню выбирая категории я всегда должен попадать на site.ru/category или site.ru/category1 или site.ru/category2 и т. д. Но попадаю только сюда: site.ru/category/category1 или site.ru/category/category2 или site.ru/category/category3 и т. д.


в хтаццес указано: ?category=$1&content=$2, то есть $1 - это должна быть только категория, а $2 - уже непосредственно урл на саму новость.
 
 Top
andrewkard
Отправлено: 23 Марта, 2017 - 10:35:54
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




mobilandser пишет:
так как почему-то я попадаю постоянню сюда: site.ru/category/category1

а ссылка куда ведет? Скорее всего на странице новости ссылка формируется не верно
 
 Top
mobilandser
Отправлено: 23 Марта, 2017 - 13:22:54
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Согласен, что не верно. Ссылка формируеться в виде /category

Вопрос как нужно ее формировать.
(Добавление)
Так что есть соображения как сделать так что бы менялась только первая часть в урле то есть категория, а вторая часть становилась пустой.
Когда делать в виде: ./index.php&category=balblabla&page=link_page_news - так получается, видимо что-то с хтацесс не так прописано, но такой вид ссылок для поисковиков не правильный да и индексируються такие страници хуже, поэтому и делал ЧПУ.
(Добавление)
Цитата:
Скорее всего на странице новости ссылка формируется не верно


Да нет, там-то она формируется вроди нормально в виде сайт/категория/новость

а вот потом после перехода по другим пунктам меню вместо новости ссылка получается сайт/категория/категория но должна быть сайт/категория/
 
 Top
teleoperator27
Отправлено: 23 Марта, 2017 - 15:09:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




попробуйте заменить все на

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Options -Indexes
  3. RewriteEngine on
  4. RewriteBase /
  5. RewriteRule ^(.*)$ /index.php?route=$1 [L,QSA]
  6.  
 
My status
 Top
mobilandser
Отправлено: 23 Марта, 2017 - 17:23:35
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Работает только меню, то есть выбор категории, а сами новости не работают.

Правильно был предыдущий вариант, но ребтал так как я хотел.
(Добавление)
еще варианты
 
 Top
teleoperator27
Отправлено: 23 Марта, 2017 - 17:57:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




mobilandser пишет:
Работает только меню, то есть выбор категории, а сами новости не работают.
Ну так для новостей надо свое правило прописать, или вы хотите, что бы у вас одним правилом все редиректилось? Напишите ссылку на новость с ЧПУ и без
(Добавление)
Вот так попробуйте


CODE (htmlphp):
скопировать код в буфер обмена
  1. Options -Indexes
  2.  
  3. RewriteEngine on
  4.  
  5. RewriteBase /
  6.  
  7. #для категорий
  8. RewriteRule ^([^/]*)$ /index.php?route=$1 [L]
  9.  
  10. #пост
  11. RewriteRule ^([^.]+)/(.*)/$ /index.php?route=$1&content=$2 [L]

Слэши не знаю, где у вас стоят в конце

(Отредактировано автором: 23 Марта, 2017 - 18:09:18)

 
My status
 Top
mobilandser
Отправлено: 23 Марта, 2017 - 18:15:47
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Вот сам файл хтацесс:

AddDefaultCharset UTF-8
ErrorDocument 403 "<BODY><H1>Forbidden</H1>
ErrorDocument 404 /errors/404.html
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9\-\_]+)$ ?category=$1 [L]
RewriteRule ^([a-z0-9\-\_]+)/$ ?category=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z0-9\-\_]+)/([^/]+)$ ?category=$1&content=$2 [L]
RewriteRule ^([a-z0-9\-\_]+)/([^/]+)/$ ?category=$1&content=$2 [L]
RewriteRule ^.$ ./index.php [QSA,L]

Я уже подумываю может быть мне в ссылке где я выбираю категории - ставить ява скрипт, который будет перенаправлять по нормальной ссылке. Но как это отразиться на индексации сайта в будущем. Сможет ли робот гугла в дальнейшем обойти все эти ссылки для индексации. И как будет работать сайт мап - то же не понятно.
(Добавление)
Спасибо всем за помощь. Проблему решил!
Если кому нужно будет - где формировал ссылки меню нужно было сделать так:

public function tplMenu($category, $id_active){ //Шаблон для вывода меню в виде дерева
if ($id_active == $category['link_page']) $menu = '<li class = "active"><a href="'.$category['link_page'].'"> '.$category['name_menu'].'</a>';
else $menu = '<li><a href="../'.$category['link_page'].'"> '.$category['name_menu'].'</a>';
if(isset($category['childs'])) $menu .= '<ul>'. $this->showCat($category['childs'], $id_active) .'</ul>';
$menu .= '</li>';
return $menu;
}

а до этого было так:


public function tplMenu($category, $id_active){ //Шаблон для вывода меню в виде дерева
if ($id_active == $category['link_page']) $menu = '<li class = "active"><a href="'.$category['link_page'].'"> '.$category['name_menu'].'</a>';
else $menu = '<li><a href="'.$category['link_page'].'"> '.$category['name_menu'].'</a>';
if(isset($category['childs'])) $menu .= '<ul>'. $this->showCat($category['childs'], $id_active) .'</ul>';
$menu .= '</li>';
return $menu;
}
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB