Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247

ЧПУ ссылки

15.04.2014, 11:04. Показов 2608. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу реализовать такую ЧПУ, например:
Обычная ссылка: /index.php?page=1
ЧПУ: music.html

Все ссылки хранил бы в БД (чпу и обычную). И вот здесь возникает вопрос, как это все делать... Нагуглил примерно такое:

1. Этап замена существующих ссылок:
SQL
1
2
3
4
INSERT INTO `sef` (`id`, `alias`, `link`) VALUES
(1, 'article', '/?view=article&id=1'),
(2, 'my_article', '/?view=article&id=2'),
(3, 'my', '/?view=section&id=1');
В массиве $matches[2] - такие данные: /?view=article&id=2

PHP
1
2
3
4
5
6
7
8
9
10
11
12
function replaceSEF($content) {
        global $mysqli;
        $regex = "[(<a[^>]*href\s*=\s*[\"'])([^'\"]*)([\"'][^>]*>\s*.*?\s*</a>)]i";
        preg_match_all($regex, $content, $matches);
        for ($i = 0; $i < count($matches[2]); $i++) {
            $temp = str_replace("&amp;", "&", $matches[2][$i]);
            $result_set = $mysqli->query("SELECT `alias` FROM `sef` WHERE `link`='$temp'");
            $row = $result_set->fetch_assoc();
            $content = str_replace($matches[2][$i], $row["alias"], $content);
        }
        return $content;
    }
Но тут сразу вопрос, тут меняется по конкретному массиву - $matches[2][$i], а как мне заменить все ссылки?

2.
.htaccess
HTML5
1
2
3
4
5
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) /?%{QUERY_STRING}
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function getContent($alias) {
        global $mysqli;
        $content = "Моя страница <a href='/?view=article&amp;id=1'>тут</a> и ещё вот <a href='/?view=section&amp;id=1'>это</a>";
        $result_set = $mysqli->query("SELECT `link` FROM `sef` WHERE `alias`='$alias'");
        $row = $result_set->fetch_assoc();
        if ($result_set) $result_set->close();
        $vars = parse_url($row["link"]);
        parse_str($vars["query"], $vars);
        if ($vars["view"] == "article") $content .= "<br />Статья с ID=".$vars["id"];
        elseif ($vars["view"] == "section") $content .= "<br />Раздел с ID=".$vars["id"];
        else $content = "404 Not Found";
        return $content;
    }
Опять же вопрос, а если я перейду на главную страницу, то выдаст ошибку... как тут быть? Так же не ясно, что делать, если моя ссылка будет выглядеть так: /?page=1, а в примере она такая: /?view=article&amp;id=1

Так же хотелось бы от вас услышать нормальный ли это способ? есть ли какие-то подводные камни? Может есть что изменить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.04.2014, 11:04
Ответы с готовыми решениями:

ЧПУ Ссылки
Добрый вечер Помогите плиз разобраться в принципе работы ЧПУ Вот к примеру есть такая ссылка ...

ЧПУ ссылки
Есть сайт http://диолстрой.рф/ Ссылки на другие страницы, кроме главной выдаются примерно так...

Настройка ЧПУ ссылки
Я пытаюсь создать ЧПУ ссылку, .htaccess мне удалось сделать, а на php не получается сформировать ссылку, как сделать на php? Вот ссылка:...

11
2 / 2 / 3
Регистрация: 17.02.2014
Сообщений: 65
15.04.2014, 15:45
а зачем все так сложно?
Бд сюда приплетать, в htacces так сложно все писать
http://www.generateit.net/mod-rewrite/index.php
Вот онлайн генератор, я через него корректирую ЧПУ, а потом просто копирую код, который он выдает в htacces и готово) занимает пару минут времени
0
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
15.04.2014, 16:27  [ТС]
Просто даже если я прикручу ЧПУ к своей ссылке то вот что получится:
Оригинал: /?page=1
ЧПУ: /1.html

Вот и хотелось бы придумывать свой текст для ссылки
0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
15.04.2014, 20:45
лучше всего через роутер тоесть ссылку вида сайт.ру/article/1 ты переделываешь на сайт.ру/index.php?route=article/1 c помощью mod_rewrite
потом
PHP
1
explode("/",$_GET[route])
и вуаля у тебя массив с адресом
0
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
15.04.2014, 21:35  [ТС]
А что означает route? и для чего он нужен?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.04.2014, 21:41
Руководство по настройке ЧПУ (Rewrite)
0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
15.04.2014, 21:41
SLameN, это всего лишь get параметр вы его можете обозвать как хотите
то есть в моем примере
PHP
1
echo $_GET[route];
выведет article/1
0
15.04.2014, 21:41

Не по теме:

а заодно выведет notice..

0
31 / 31 / 13
Регистрация: 11.02.2014
Сообщений: 97
15.04.2014, 21:43
KOPOJI,

Не по теме:

изза обращения к глобальной переменной или отсутствия кавычек или ... ??

0
15.04.2014, 21:50

Не по теме:

из-за отсутствия кавычек/апострофов. Впрочем, может, и еще где, я код даже не смотрел.. Сами можете посмотреть при желании:

PHP
1
2
error_reporting(-1);
ini_set('display_errors', true);

0
 Аватар для SLameN
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
15.04.2014, 21:58  [ТС]
Спасибо за посты. Но, как я писал выше (пост 3), такой метод мне не очень подходит, а вот первый замечательный, но сильно замудренный и по нему есть вопросы, можете с ним помочь?
0
11 / 11 / 3
Регистрация: 23.01.2014
Сообщений: 295
15.04.2014, 22:03
SLameN,Просто даже если я прикручу ЧПУ к своей ссылке то вот что получится:
Оригинал: /?page=1
ЧПУ: /1.html


А не проще сделать чтобы ваш ?page = 1 ровнялся бы ?page = musik тогда бы и получилось бы musik.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2014, 22:03
Помогаю со студенческими работами здесь

ЧПУ ссылки в PHP
Здравствуй форум! Делаю сайт на котормо есть профили пользователей, ссылки на них выглядят следующим образом mysite.com/user?id=MeG1tsune,...

Как создавать чпу ссылки
Здравствуйте, меня интересует как создавать чпу ссылки. Теории знаю много да вот никак не могу сделать это на практике. Ссылка у меня...

Почему не преобразуются ссылки чпу?
Добавил в htaccess на денвере следующую запись: RewriteEngine On RewriteBase / RewriteRule ^/(*)?.html$ /index.php?id=$1 ...

Как делать ссылки чпу на php?
Всем привет! Подскажите пожалуйста как реализовать ссылки чпу для сайта на php?...

Требуется переделать ссылки с параметрами на чпу
Здравствуйте, имеется сайт, где вся структура страниц выглядит след образом: ?view=etiketks&amp;id=185 и некоторые ?view=about типо того,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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