Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 28.04.2017
Сообщений: 17

Роутинг и настройка .htaccess

02.07.2017, 00:22. Показов 3959. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла очередная проблема.

Имеется ссылка вида: site.ru/category/sub-category/name

category - это папка, sub-category - это файл, name - это информация из БД

Файл index.php (точка входа):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$path = explode('/', filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL));
 
if(isset($path[1]))
{
$path_application = $path[1];
}
else
{
echo "Ошибка!";
}
 
if(isset($path[2]))
{
$path_action = $path[2];
}
else
{
echo "Ошибка!";
}
 
$pathURL = '/app/' . $path_application . '/' . $path_action . '.php';
 
if(file_exists($pathURL))
{
require_once($pathURL);
}
?>
Файл .htaccess
HTML5
1
2
3
4
5
6
RewriteEngine On
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
RewriteRule ^.*$ index.php [QSA,L]
Проблема в том, что я не понимаю как получить name из $path_action. Т.е. в файле sub-category ($path_action) идет выборка из базы данных (список наименований), но при открытии наименования из этого списка, мы получаем более развернутую информацию о выбранном товаре (sub-category/name).

Соответственно должно быть что-то такое: site.ru/watch/casio/MTP-E133L-7E (категория - часы (папка), марка - CASIO (файл, список всех моделей), модель - MTP-E133L-7E)

Надеюсь понятно объяснил. Где чего не хватает, чтобы всё работало как задумано?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2017, 00:22
Ответы с готовыми решениями:

Настройка .htaccess
Здравствуйте, есть .htaccess AddDefaultCharset utf-8 ErrorDocument 404 /404.html RewriteEngine on RewriteCond...

Настройка Htaccess ЧПУ
Доброй ночи, вот такая проблема. Если папка где хранятся модули Путь: &quot;/modules/module1/index.php&quot;, ...

Настройка .htaccess (ЧПУ)
В файле .htaccess прописана следующая строчка: RewriteRule ^(+)/$ index.php?act=$1 Если зайти по адресу site/news/, то...

13
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
02.07.2017, 09:56
PHP
1
2
$path = explode('/', filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL));
var_dump($path);
0
0 / 0 / 1
Регистрация: 28.04.2017
Сообщений: 17
02.07.2017, 10:46  [ТС]
А зачем? И так понятно, что мы разбиваем строку. Ну вот:

site.ru/
PHP
1
2
3
4
5
6
array(2) {
  [0]=>
  string(0) ""
  [1]=>
  string(0) ""
}
site.ru/watch/
PHP
1
2
3
4
5
6
7
8
array(3) {
  [0]=>
  string(0) ""
  [1]=>
  string(5) "watch"
  [2]=>
  string(0) ""
}
site.ru/watch/casio/
PHP
1
2
3
4
5
6
7
8
9
10
array(4) {
  [0]=>
  string(0) ""
  [1]=>
  string(5) "watch"
  [2]=>
  string(5) "casio"
  [3]=>
  string(0) ""
}
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
02.07.2017, 11:53
PHP
1
if (isset($path[3])) $name = $path[3];
0
0 / 0 / 1
Регистрация: 28.04.2017
Сообщений: 17
02.07.2017, 12:17  [ТС]
Это понятно, но как мне всё это в коде организовать?

Т.е. на странице /watch/casio/ есть список всех моделей часов CASIO. Нажимаю на модель и меня должно перекинуть на /watch/casio/выбранная_модель. Название модели берется из базы, а ссылка должна быть в каком виде?

<a href="ЧТО ЗДЕСЬ?">Модель</a> но так, чтобы url был вида /watch/casio/выбранная_модель
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
02.07.2017, 12:59
PHP
1
2
3
4
5
<?php
$kategoriya = 'chasy';
$brend = 'casio';
$model = 'mtp';
echo '<a href="/'.$kategoriya.'/'.$brend.'/'.$model.'">'.$model.'</a>';
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
02.07.2017, 18:52
Лафилл, зачем вам для каждого бренда отдельный файл? Только чтобы проверить его существование?

Используйте три разных роута (по кол-ву компонентов пути) или делайте соотв. вилку прямо в «приложении» (watch, хотя, думаю, можно использовать один и тот же код не только для часов): список брендов (или всех часов), список моделей конкретного бренда, конкретная модель. Кстати, в плане адресации для страниц продуктов часто используют отдельную ветку с меньшим числом компонентов, например: /products/MTP-E133L-7E).
0
0 / 0 / 1
Регистрация: 28.04.2017
Сообщений: 17
02.07.2017, 19:01  [ТС]
Что-то я всё равно не могу понять. Все запросы обрабатывает index.php (единая точка входа).

watch - это папка;
casio - это php файл;
MTP-E133L-7E - это информация. Данные о ней хранятся в базе, никаких файлов для этого нет;

Мне надо правильно дописать файл index.php или .htacces, чтобы всё правильно работало.

Добавлено через 3 минуты
miketomlin, потому что по-другому пока не понимаю как это организовать.
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
02.07.2017, 19:19
Покупатели смогут быстрее найти товар, если сделать общий интернет магазин
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
02.07.2017, 20:10
Цитата Сообщение от Лафилл Посмотреть сообщение
casio - это php файл
На все бренды (часов) один файл? Если нет, ответьте на мой вопрос из пред поста.

Цитата Сообщение от Лафилл Посмотреть сообщение
Мне надо правильно дописать файл index.php или .htacces, чтобы всё правильно работало.
Фронт обычно не решает частные задачи (вроде непосредственной выдачи страниц каталога и т.п.). Его уровень – это как раз роутинг и т.п. Роутер уже работает? Если да, то опишите как. Если нет, то займитесь его разработкой (с оглядкой на опред. частные задачи, но держа в голове возможность его применения и для др. частных задач).
0
0 / 0 / 1
Регистрация: 28.04.2017
Сообщений: 17
02.07.2017, 20:24  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
На все бренды (часов) один файл?
Нет. Один файл - один бренд. Я понимаю, что это не правильно, но других решений пока не вижу. Хотя нет, вижу, через кучу условий в одном файле. Типа:

PHP
1
2
3
4
5
if($_GET['brand'] == 'casio')
{
#Код
}
...
Цитата Сообщение от miketomlin Посмотреть сообщение
Роутер уже работает? Если да, то опишите как.
Работает.
Сначала разбиваем URL => Проверяем наличие папки (watch, straps, etc.) => Если папка существует, то проверяем наличие в ней файла бренда (casio.php, orient.php, etc.) => Подключаем нужный файл из нужной папки в соответствии с URL => Выводим на экран
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
02.07.2017, 21:01
Видимо не хватает файла, который отобразит товар
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
02.07.2017, 21:37
Цитата Сообщение от Лафилл Посмотреть сообщение
Нет. Один файл - один бренд. Я понимаю, что это не правильно, но других решений пока не вижу.
Решение очевидно. Сделать таблицу брендов и закрепить за всем этим добром один обработчик. Я вам два основных варианта уже описал, правда, не совсем понятно, что у вас есть /watch и есть ли вообще, но не суть. Либо три отдельных роута со своими обработчиками. Либо вы определяете приложение-обработчик и передаете ему ост. компоненты пути в качестве отдельных параметров, например в массиве, или скопом, а там уже в зависимости от состава параметров делается дальнейшее разделение по типу страниц. Вот тут можно найти описание простейшего движка, работающего по второму варианту (т.е. с максимум одним обработчиком на ветку). Доп. компоненты пути, если их несколько, передаются скопом, т.е. нужно либо писать приложение, делающее дальнейшее разделение самостоятельно, либо использовать для продуктов отдельное «приложение» вроде products, о чем я писал ранее. Если нужно, могу где-нибудь выложить пример работы модуля двухуровневого каталога и/или написать статейку, описывающую его реализацию.
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
03.07.2017, 00:48
Цитата Сообщение от Лафилл Посмотреть сообщение
sub-category
и это работает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2017, 00:48
Помогаю со студенческими работами здесь

Настройка url через .htaccess
Всем привет. Не могу настроить урлы site.ru/?service=hair-removal-elite в файлике прописываю RewriteRule ^service/$...

.htaccess - настройка закрытой зоны (админка)
Пытаюсь настроить .htaccess для того, что бы при переходе на страницу админки (путь: admin/admin.php). Но в итоге мне денвер говорит, что...

Настройка htaccess
Мне нужно сделать редирект через htaccess по таким условиям: если url сайта http://домен/киев/квартиры/продам направлять на ...

Настройка htaccess
Нужно сделать редирект на новый домен, но при этом исключить папку administrator, т.е. чтобы в админку сайта можно было заходить на старый...

Роутинг
Всем доброго дня! :) Всем кому не лень, подскажите пожалуйста как сделать роутинг для mvc. то есть нужно что бы можно было обращаться...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru