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

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

20.12.2018, 13:50. Показов 1915. Ответов 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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru