Попрощайтесь с index.php в своих URL-адресах: несколько способов его удаления с помощью .htaccess

URL-адреса с «index.php» могут сделать ссылки вашего сайта перегруженными и менее удобными для пользователя. Удаление index.php из ваших URL-адресов не только улучшает эстетику, но и улучшает SEO, делая ваши URL-адреса более краткими и наглядными. В этой статье мы рассмотрим различные способы достижения этой цели с помощью файла.htaccess, а также примеры кода и простые пояснения.

Метод 1: использование RewriteRule
Директива RewriteRule в.htaccess позволяет перезаписывать URL-адреса на основе определенных шаблонов. Чтобы удалить «index.php» из ваших URL-адресов, добавьте следующий код в файл.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]

Объяснение:

  • RewriteEngine Onактивирует механизм перезаписи URL.
  • RewriteCond %{REQUEST_FILENAME} !-fпроверяет, не соответствует ли запрошенный URL существующему файлу.
  • RewriteRule ^(.*)$ index.php/$1 [L]перезаписывает URL-адрес, добавляя все, что следует после домена, в «index.php».

Метод 2: использование DirectoryIndex
Другой способ удалить «index.php» — использовать директиву DirectoryIndex. Добавьте следующий код в свой файл.htaccess:

DirectoryIndex index.php

Объяснение:

  • DirectoryIndex index.phpустанавливает index.php в качестве файла по умолчанию, который будет обслуживаться при запросе каталога. Это эффективно скрывает «index.php» из URL-адреса.

Метод 3: использование PHP $_SERVER[’REQUEST_URI’]
Если у вас есть доступ к коду PHP, вы можете удалить «index.php» из URL-адреса, используя переменную $_SERVER['REQUEST_URI']. Поместите следующий код в начало файла PHP:

<?php
if (strpos($_SERVER['REQUEST_URI'], 'index.php') !== false) {
    header('Location: ' . str_replace('index.php', '', $_SERVER['REQUEST_URI']));
    exit();
}
?>

Объяснение:

  • strpos($_SERVER['REQUEST_URI'], 'index.php') !== falseпроверяет, присутствует ли в URL-адресе «index.php».
  • str_replace('index.php', '', $_SERVER['REQUEST_URI'])удаляет «index.php» из URL-адреса.
  • header('Location: ...')перенаправляет пользователя на обновленный URL-адрес.