Не знаю, как сделать фронт-контроллер, если...

Добрый день, возможно вопрос не в данную рубрику. Изучаю ООП, ранее использовался только процедурный стиль. Читаю статьи, делаю практику на локальном хостинге. Тут нарисовался шанс испытать себя на реальном проекте. Итак, у клиента хостинг jehost (FastCGI (Apache)), настраиваю .htaccess так:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?r=$1 [L,QSA]

и, допустим, при таком url site.ru/catalog/pc/, $_GET["r"] ничего не выводится. Попробовала настроить просто такой редирект RewriteRule ^(.*)$ public/?$1 [R=302,QSA], с помощью сервиса проверки редиректа видно, что в $1 попадает только index.php то есть site.ru/catalog/pc/ -> site.ru/public/?index.php.
Написала в техподдержку хостинга, сказали, что так и должно работать. На локальном работает правильно, на другом хостинге тоже. Как в таком случае получить route?

[email protected] 22.06.2021 в 14:53

Ответы (3)


Привет! Попробуй так:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php?r=$1 [QSA,L]
ivashkevich 22.06.2021 в 18:56

Спасибо за ответ! Но, к сожалению, такой способ тоже не сработал. Выводит NULL ($_GET['r']).

[email protected] 22.06.2021 в 19:05

Целый учебник по mod_rewrite https://hackware.ru/?p=5485
Если вкратце, то можно включить логи apache2 и посмотреть результат преобразования.

Mediaphag 07.12.2021 в 15:15

Добавить новый ответ