Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Toxa33rus
3917 / 918 / 125
Регистрация: 16.04.2009
Сообщений: 1,946

Алиас URL адреса

05.10.2020, 16:21. Показов 2853. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для некоторых страниц сайта нужно создать алиасы, например:
на сайте есть страница: site.ru/catalog?param1=22&param2=33
нужно создать страницу site.ru/catalog/super-puper-tovar
В адресной строке должен быть второй адрес, никаких редиректов быть не должно, но PHP должен увидеть param1 и param2.

Первое что приходит в голову, это RewriteRule, но таких страниц будет много и не хочется засирать htaccess, а хотелось бы хранить это в БД. Есть мысли?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2020, 16:21
Ответы с готовыми решениями:

Пишу скрипт который считывает данные с другого URL адреса
Пишу скрипт который считывает данные с другого URL адреса. И случается интересная заманушка. Сначала функции работают как надо. А при...

Преобразование URL-адреса
Здраствуйте уважаемые. давно интересовало как делать такиж адреса http://sait.com/news/ . Потом подумал, что возможно ето папка news в...

Максимальная длина URL-адреса
Максимальный URL адрес допускаемый в поисковых машинах имеется ввиду ЧПУ. Какой длины должен быть URL адрес?

4
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
05.10.2020, 18:17
Цитата Сообщение от Toxa33rus Посмотреть сообщение
никаких редиректов быть не должно
тогда парсить строку и формировать param1 и param2

Цитата Сообщение от Toxa33rus Посмотреть сообщение
но PHP должен увидеть param1 и param2
то есть страница должна открываться как по первой ссылке так и по второй? Тогда сначала смотрим присутствуют ли param1 и param2, если нет, то парсим строку запроса, и работаем с нужными элементами.

По этой ссылке: site.ru/catalog/super-puper-tovar невозможно определить param1 и param2 (если они должны быть целочисленными). Скорее всего так ссылку формировать нужно будет: site.ru/catalog/super-puper-tovar-22-23 или site.ru/catalog/super-puper-tovar/22-23. Или в БД записываем соответствия типа: super-puper-tovar == param1=22&param2=33 Но вариант с БД плохой, лучше в ссылках передавать параметры.
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
05.10.2020, 21:07
Лучший ответ Сообщение было отмечено Toxa33rus как решение

Решение

Цитата Сообщение от Toxa33rus Посмотреть сообщение
Есть мысли?
"Умный" фронт-контроллер, запускаемый по префиксу /catalog/:

edit catalog.php
PHP
1
2
3
<h1><?= $page['title'] ?></h1>
<p>Параметр 1: <?= $page['param1'] ?></p>
<p>Параметр 2: <?= $page['param2'] ?></p>
mysql hyde_db
MySQL
1
2
3
4
5
6
7
8
9
10
11
INSERT INTO `site_categories` (`id`, `title`, `bits`) VALUES ('catalog', 'Каталог', 19);
 
CREATE TABLE `site_catalog` (
  `id` varchar(50) NOT NULL,
  `title` tinytext NOT NULL,
  `param1` int(10) unsigned NOT NULL,
  `param2` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
INSERT INTO `site_catalog` (`id`, `title`, `param1`, `param2`) VALUES ('super-puper-tovar', 'Супер-пупер товар', '22', '33');

Готово: hyde.pageshop.ru/catalog/super-puper-tovar
0
 Аватар для Toxa33rus
3917 / 918 / 125
Регистрация: 16.04.2009
Сообщений: 1,946
07.10.2020, 08:45  [ТС]
Цитата Сообщение от sasha0012 Посмотреть сообщение
тогда парсить строку и формировать param1 и param2
В том и проблема, что в этом пути нет самих параметров, это ЧПУ ссылка.

Цитата Сообщение от estic Посмотреть сообщение
"Умный" фронт-контроллер
Я тоже так и хотел изначально, но думал вдруг что проще можно, например из PHP получить доступ к RewriteRule файла htaccess (вдруг в каком-то заголовке это передается).

В итоге сделал БД с сеошными штуками.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `seo` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `url_chpu` VARCHAR(128) NOT NULL,
  `url_params` VARCHAR(512) CHARACTER SET utf32 NOT NULL DEFAULT '',
  `h1` VARCHAR(32) NOT NULL DEFAULT '',
  `title` VARCHAR(32) NOT NULL DEFAULT '',
  `description` VARCHAR(512) NOT NULL DEFAULT '',
  `text_pre` text NOT NULL,
  `text_post` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `url_chpu` (`url_chpu`),
  KEY `url_params` (`url_params`(191))
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
В контроллере подгружаю данные по странице, распарсиваю get параметры и пихаю их в $_GET. Дальше код отрабатывает как надо, "думая", что мы находимся по параметрической ссылке.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        $seo = new App_Model_Seo();
        $seo->loadByUrl($this->getRequest()->getRequestUri());
        if ($seo->id) {
            $url_str = str_replace('/catalog/', '', $seo->path); // url_str должна быть без /каталог/
            if (strpos($seo->url_params, '?')) {
                $real_params = explode('?', $seo->url_params, 2)[1];
                $real_params = explode('&', $real_params);
                foreach($real_params as $param) {
                    $p = explode('=', $param)[0];
                    $v = explode('=', $param)[1];
                    $_GET[$p] = $v;
                }
            }
        }
Подскажите, как правильно отрезать начало строки если оно совпадает с какой-то подстрокой?
Имеется ввиду вот это:
PHP
1
$url_str = str_replace('/catalog/', '', $seo->path);
Т.е. было /catalog/super-puper-tovar, должно стать super-puper-tovar. Но если вдруг будет ссылка /catalog/super-puper-tovar/catalog/foo, то вырежется два вхождения.
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
07.10.2020, 12:10
Цитата Сообщение от Toxa33rus Посмотреть сообщение
В итоге сделал БД с сеошными штуками.
Я принципиально не различаю числовые и символьные идентификаторы в адресах. Так сразу все становится проще.

Цитата Сообщение от Toxa33rus Посмотреть сообщение
KEY `url_chpu` (`url_chpu`)
UNIQUE KEY, иначе намучаетесь с дублями.

Цитата Сообщение от Toxa33rus Посмотреть сообщение
распарсиваю get параметры и пихаю их в $_GET
parse_str

Зачем в базе данных хранить разделитель "?"? Храните строку запроса без него. Можно использовать и какой-нибудь другой формат, например JSON, если хранить параметры в отдельных полях таблицы по каким-то причинам нецелесообразно.

Цитата Сообщение от Toxa33rus Посмотреть сообщение
Подскажите, как правильно отрезать начало строки если оно совпадает с какой-то подстрокой?
strncmp/substr

Цитата Сообщение от Toxa33rus Посмотреть сообщение
Но если вдруг будет ссылка /catalog/super-puper-tovar/catalog/foo, то вырежется два вхождения.
Считайте все, что идет после первой части пути, второй частью. В предыдущем сообщении я опирался на каркас, который работает именно по такому принципу: в нем super-puper-tovar и super-puper-tovar/catalog/foo - это разные идентификаторы. Соответственно каркас будет выводить страницу ошибки 404 по этому адресу: hyde.pageshop.ru/catalog/super-puper-tovar/catalog/foo
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2020, 12:10
Помогаю со студенческими работами здесь

Сокращение url адреса сайта
Доброго времени суток, форумчане! Затрону затертую до дыр тему - как укоротить адрес сайта с ...

Как генерируются url адреса
Люди добрые! Откройте мне секрет как генерируются url'ы.Например https://plus.google.com/110356707031058607262 ОТКУДА ЭТО -...

Достать куки другого url адреса
Скрипт подгружается с другого url aдреса на том же сайте. Возможно ли достать значение куков которые были сохранены на определенной...

Выбрать все URL адреса из картинок
Помогите написать регулярное выражения для того чтобы выбрать все URL адреса из картинок: &lt;img src=&quot;(???)&quot; Выбирать надо то,...

Подключить стиль в зависимости от куска url-адреса
Здравствуйте, подскажите пожалуйста про что почитать, чтобы реализовать следующее: есть два url-адреса, например: 1....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru