Как сделать ЧПУ вида mysite.ru/product/Item1?

Всем привет!
Есть сайт на PHP с каталогом товаров.
Хочу сделать чтобы карточка товара открывалась по адресу mysite.ru/product/Item1
Есть каталог /product/, в нем файлик index.php - который должен получить название товара (Item1) и по этому названию вывести соответствующую карточку товара.
Вопрос: как сделать чтобы при переходе по этому адресу выводилась не сообщение об отсутствующей странице, а запускался index.php? И как в нем получить название товара (Item1)?
Предполагаю что необходимо сделать редиректы в .htaccess, но как потом получить Item1 ?

UPD: Можно ли сделать в htaccess редирект на index.php который лежит не в корне, а уровнем выше? Т.е. из примера выше в mysite.ru/product/index.php

Если использовать вариант, что редирект идет на 1 конкретный файл, а этот файл уже будет include'ить другие скрипты в зависимости от строки запроса - насколько это правильно и красиво? И какие могут возникнуть сложности?
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer
Рекомендую посмотреть любой современный фреймворк - Laravel / (прости, Господи) Yii2 / Slim / (бери любой). И посмотреть, как там сделана точка входа.
Коротко - используется паттерн FrontController. Создается директория public, в которую обращается сервер. Далее, в зависимости от используемого тобой сервера соответствующие команды прописываются для сервера.

Примерное содержимое для Apache2 и Nginx
Apache

.htacces кладется в директорию public
Options +FollowSymLinks -Indexes
RewriteEngine On

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Для nginx

В конфигурационный файл сервера прописывается что-то подобное.
location / {
try_files $uri $uri/ /index.php?$query_string;
}
</spoiler>
</spoiler>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы