Обеспечить обращение к сайту только по ЧПУ

182
19 января 2019, 21:40

Пытаюсь настроить ЧПУ.

Вот так выглядит .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?c=$0 [QSA]

<FilesMatch "\.(php)$">
Deny from all
</FilesMatch>
<FilesMatch "index.(php)$">
Allow from all
</FilesMatch>

В файле index.php URL разбивается по слешу. И в зависимости от того, что у нас в URL, подключается нужный контроллер. Всё работает нормально.

Но есть одна проблема. При обращении по адресу site.ru/index.php открывается главная страница. При обращении по адресу site.ru/index.php?c=add открывается то же, что открывается по адресу site.ru/add.

Как сделать так, чтобы сайт работал только на ЧПУ, а при обращении по адресу типа site.ru/index.php... была ошибка 404, либо редирект на главную страницу?

Answer 1

Решил проблему.

В index.php дописал следующие строчки:

//Настройка 404 ошибки для 'index', 'index.php?...' и т. п. ;
$root = '/site.ru';
$request_uri = $_SERVER['REQUEST_URI'];
$pattern = "/index/i";
preg_match($pattern, $request_uri, $p_m);
if (count($p_m) > 0) {
    //Подключаем контроллер 404 ошибки, в нём есть строчка "header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");"
    require_once ('c/404.php');
    exit();
}

Теперь работает как надо.

READ ALSO
Как обойти 5-секундное ожидание cloudfare на php?

Как обойти 5-секундное ожидание cloudfare на php?

Ситуация: при заходе на сайт с нового ip без cookie включается защита cloudfare, которая несколько секунд что-то вычисляет, затем высылает привязанные...

138
Вставка кнопок в telegram bot

Вставка кнопок в telegram bot

Подскажите пожалуйста, есть php код бота `

155
Пагинация php и mySQL

Пагинация php и mySQL

Как здесь сделать пагинацию? В идеале двумя способами: обычная пагинация ( < 1 2 3 4 5 > ) и в добавок через кнопку "Показать еще" (дозагружать строки...

191