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

Многостраничный сайт с ЧПУ

20.12.2018, 13:50. Показов 2074. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день)
Подскажите, плис, примерно что нужно сделать, чтобы многостранничный сайт был с ЧПУ. Читаю статьи,смотрю видосы, везде опираются от одной страницы index.php и GET-запросов. Создают таблицу в базе данных со столбцами id и собственно названиями ссылок, парсят приходящий URL и смотрят есть ли такой в таблице, и если есть, то генерят ЧПУ-ссылку. А что делать если никаких GET-запросов нету, есть только ссылки на страницы и мне нужны аллиасы, с подкаталогами, то есть на подобии mysite.ru/holder/articles/myarticle1, как-то так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2018, 13:50
Ответы с готовыми решениями:

Многостраничный сайт
Доброго времени суток. Есть сабж: создаю интернет магазин (лабораторная в универе, не стартап). Ясно там будет главная страница,...

Решил сайт перенастроить на ЧПУ
здравствуйте, у меня такая проблема. решил на сайте сделать оптимизацию ЧПУ вроде всё верно сделал но не работает подключение к сайту...

Был сайт без ЧПУ, потом с "некрасивыми" ЧПУ
Сайт на Joostina. Сперва был без ЧПУ. Потом после индексации включили штатный ЧПУ Жустины. Там ЧПУ вида site.ru/content/1/123.html Потом...

30
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
20.12.2018, 22:33
http://crazy-russian.ru/develo... ccess.html

Добавлено через 1 минуту
Цитата Сообщение от xpersia_89 Посмотреть сообщение
везде опираются от одной страницы index.php и GET-запросов. Создают таблицу в базе данных со столбцами id и собственно названиями ссылок, парсят приходящий URL и смотрят есть ли такой в таблице, и если есть, то генерят ЧПУ-ссылку.
ужас какой

Добавлено через 14 секунд
Цитата Сообщение от xpersia_89 Посмотреть сообщение
А что делать если никаких GET-запросов нету, есть только ссылки на страницы
это как?
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
21.12.2018, 08:32
xpersia_89, гуглите MVC.
Цитата Сообщение от xpersia_89 Посмотреть сообщение
везде опираются от одной страницы index.php и GET-запросов
GET-параметры тут не нужны.
1
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 10:32  [ТС]
Jodah, так у меня не с помощью MVC сделан сайт.

Добавлено через 20 секунд
Jodah, Единая точка входа нужна,Вы это имеете в виду?

Добавлено через 5 минут
AddDefaultCharset utf-8
AddCharset utf-8 *
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %}{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
RewriteEngine Off

htaccess у меня вот такой. Здесь я собственно и перенаправляю все на index-страницу.
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
21.12.2018, 11:17
xpersia_89, что-то я невнимательно ваш вопрос прочитал.

Цитата Сообщение от xpersia_89 Посмотреть сообщение
никаких GET-запросов нету
Вы имеете ввиду GET параметры?

Цитата Сообщение от xpersia_89 Посмотреть сообщение
есть только ссылки на страницы и мне нужны аллиасы, с подкаталогами, то есть на подобии mysite.ru/holder/articles/myarticle1
А в чём именно проблема? У вас в index.php есть доступ к $_SERVER['REQUEST_URI']. Там лежит путь, который юзер ввёл, допустим /holder/articles/myarticle1. Далее пишете код, который ищет по этому пути нужную запись в базе.
1
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 11:53  [ТС]
Jodah, ну вот есть какая-то другая страница, отличная от index'а. К примеру, uslugi. Вот на ней что нужно сделать чтобы заработало? если я в index'е выведу
PHP
1
echo $_SERVER['REQUEST_URI'];
то он же только на странице index'а будет выводить, на других страницах не будет?
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
21.12.2018, 11:57
xpersia_89, упрощённо:

PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$url = $_SERVER['REQUEST_URI'];
 
if($url == '/delivery')
    include 'delivery.php';
elseif($url == '/contacts')
    include 'contacts.php';
elseif($url == '/')
    include 'main.php';
else
    include 'error404.php';
Т.е. все запросы идут через index.php, где вы смотрите на URL и подключаете нужный PHP файл.
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 12:01  [ТС]
Jodah, на самой странице index, у меня есть ссылки, скажем на uslugi, в <a href=""> мне какую ссылку писать, /uslugi или uslugi.php?
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
21.12.2018, 12:08
xpersia_89, /uslugi конечно. Про файл uslugi.php юзер ничего не должен знать. Лучше его вообще держать за пределами публичной части сайта.
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 12:12  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Лучше его вообще держать за пределами публичной части сайта
Что значит? то есть в определенной папке какой-то?
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
21.12.2018, 12:18
xpersia_89,

Добавлено через 1 минуту
Форум порезал ссылку, процитирую тогда одного человека из гугла:
Вынесение за пределы корня сайта это частный случай правила "запретить доступ к системным файлам из браузера".

Например, в ядре находится скрипт "add-user.php", в котором не осуществляется проверка прав доступа (т.к. такая проверка осуществляется в файле index.php, через который должны вызываться все другие скрипты с помощью PHP инструкции "include").

Соответственно, оставлять доступ к этому скрипту напрямую из браузера нельзя (т.к. в таком случае злоумышленник сможет воспользоваться уязвимостью; особенно, если скрипт открытый и файлы ядра всем известны).

Поэтому в папке со скриптами ядра создают специальный файл, указывающий веб-серверу, что напрямую предоставлять доступ к файлам в папке нельзя (в случае веб-сервера apache, это файл ".htaccess" с содержимым "deny from all") или вообще выносят файлы ядра за пределы той папки, файлы из которой доступны браузеру напрямую. Второй способ (вынесение файлов за пределы) считается более надёжным.
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 12:44  [ТС]
Jodah, Ясно, но если честно с ссылкой
HTML5
1
<a href="/uslugi">
у меня не заработало. Перенаправляет на 404 ошибку.

Добавлено через 17 минут
Jodah, Я даж вот так вот сделал
PHP
1
2
3
4
    $url = $_SERVER['REQUEST_URI']; 
    $array_url = preg_split ("/(\/|\..*$)/", $url,-1, PREG_SPLIT_NO_EMPTY);
    if($array_url[0] == 'uslugi')
        include 'uslugi.php';
и все-равно не пашет

Добавлено через 1 минуту
Может htaccess не правильно сделал
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
21.12.2018, 13:00
Цитата Сообщение от xpersia_89 Посмотреть сообщение
Может htaccess не правильно сделал
Вообще у меня ваш вариант тоже не работает. Попробуйте так:

Code
1
2
3
4
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 14:19  [ТС]
Jodah, У меня так получилось, Ура!
Скажите, что теперь с самим index-файлом делать? содержимое его получается нужно куда-то вынести, как-то его назвать по-иному, и тоже includ'ом подключить, так?

Добавлено через 6 минут
Страница получается всегда одна что ли у нас будет, как в single page application?
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
21.12.2018, 14:31
Цитата Сообщение от xpersia_89 Посмотреть сообщение
так?
Нет, сам index.php лежит в корне сайта и никуда его девать не нужно.

Если вам нужно какое-то конкретное решение, пусть будет так. Создаём в корне сайта папку private. В ней создаём .htaccess файл с содержимым Deny from all, чтобы файлы никто не мог запустить через адресную строку.

Внутри private создаём папку controllers, там будут лежать обработчики страниц.

Далее в index.php пишем следующее:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$url = $_SERVER['REQUEST_URI'];
 
$controllers = [
    '/delivery' => 'delivery',
    '/contacts' => 'contacts',
    '/' => 'main'
];
 
if(isset($controllers[$url]))
    $controller = $controllers[$url];
else
    $controller = 'error404';
 
require(__DIR__ . '/private/controllers/' . $controller . '.php');
Контроллер - это файл, который отвечает за отображение текущей страницы.

Опять же, это упрощённый пример. Делать можно как угодно, логику вы определяете сами. Главная идея - в index.php мы берём $_SERVER['REQUEST_URI'], анализируем его и подключаем нужный контроллер.
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 15:07  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
чтобы файлы никто не мог запустить через адресную строку
а чем это чревато?
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
21.12.2018, 16:12

Не по теме:

А чем чревато, когда посторонние могут дергать за Вашу селезенку или сердечную мышцу?



Добавлено через 16 минут
Не совсем понятен подход к делу. Сайт вроде бы есть. А структурообразующих компонентов нет.

Если нужен пример готового несложного каркаса, есть навыки работы с PHP/MySQL, можете мне написать. Вот вам демонстрационный пример.

Добавлено через 7 минут
Или ищите примеры в репозиториях по слову "роутер" ("маршрутизатор"), а не читайте статьи и смотрите видосы.
1
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 16:15  [ТС]
Phantom-84, Не понял. Так сайт написан с помощью обычного php, и страницы все заканчиваются на .php. То есть без mvc, CMS, и т.д. По-старинке, можно сказать. Не совсем понял Ваш вопрос

Добавлено через 2 минуты
Jodah,
Цитата Сообщение от xpersia_89 Посмотреть сообщение
содержимое его получается нужно куда-то вынести, как-то его назвать по-иному, и тоже includ'ом подключить, так?
Собственно, я так и хотел сделать, как вы показали с контроллерами только без них. И в таком случае, содержимое index-файла и придется перенести в отдельный файл, main.php, скажем. Собственно, пока я так и делаю, в дальнейшем буду разбираться, как вы советуете с контроллерами.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
21.12.2018, 16:21
Т.е. даже единой точки входа нет? Это не "single page application". Но все запросы, не относящиеся к статичным файлам, проходят через этот файл. Другие php-файлы лучше убрать из публичного каталога, чтобы к ним не было доступа.

Если не готовы использовать современные подходы, файловое расширение в адресах можете убрать при помощи директив в том же .htaccess, а в ссылках убрать вручную.
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 15
21.12.2018, 16:27  [ТС]
Такой вопрос еще интересует. Почему когда я неправильно ввожу название страницы, например, mysite.ru/uslugi_sdjfhkjsdhfkj меня переводит как и должно на сверстанную 404-ю ошибку, а если я добавляю в конце всего этого слэш mysite.ru/uslugi_sdjfhkjsdhfkj/, то переводит на вроде бы ту же 404-страницу, только пропадают стили куда-то, слова те же, но совершенно ничего не сверстано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2018, 16:27
Помогаю со студенческими работами здесь

Как перенести многостраничный сайт на wordpress?
Есть сайт с несколькими страницами, нужно перенести его на интернет-хостинг, подготовил все страницы (поменял расширение html на php),...

Как сделать многостраничный сайт без PHP?
Подскажите, как создать многостраничный сайт 10-15 однотипных страниц и залить на хостинг? С версткой знаком хорошо, а с пхп и различными...

Многостраничный сайт, как делается переход по страницам?
Есть, например, сайт, где меню/контакты/отзывы. Меняться, понятное дело, должна контентная часть. Так вот как при знаниях html/css делается...

Как собрать многостраничный сайт только на стороне клиента?
Всем привет, есть многостраничный сайт с меню, шапкой, содержимым. Только html и css. Т.е. никакой динамической сборки, баз данных и...

Простой многостраничный сайт на Yii2 без БД, есть ли быстрый старт для новичка в Yii2?
Привет! Решил смастерить сайт на Yii2, прочел вчера вводный раздел документации - основа понятна, а вот по деталям реализации куча...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru