Скрытие расширений «.php» из URL-адресов с помощью .htaccess: подробное руководство

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

Метод 1: перезапись URL-адресов с помощью mod_rewrite
Модуль mod_rewrite позволяет нам перезаписывать URL-адреса на лету. Используя регулярные выражения, мы можем переписать URL-адреса, исключающие расширение «.php». Добавьте следующий код в свой файл.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Метод 2: опция MultiViews
Опция MultiViews позволяет серверу автоматически сопоставлять запрос «/page» с «/page.php», если он существует. Это можно включить, добавив следующий код:

Options +MultiViews

Метод 3: принудительная загрузка
Если вы хотите принудительно загрузить файл, не раскрывая его расширение, вы можете использовать следующий код:

<FilesMatch "^(example)$">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</FilesMatch>

Метод 4: перенаправление на чистые URL-адреса.
Вместо перезаписи URL-адресов вы также можете перенаправлять запросы URL-адресов с расширениями «.php» на более чистые версии. Используйте следующий код:

RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+(.+)\.php(?:\s|\?) [NC]
RewriteRule ^ /%1 [R=301,L]

Метод 5. Использование фронт-контроллера
Фронт-контроллер — это единая точка входа для всех запросов. Он может обрабатывать URL-маршрутизацию, не раскрывая лежащую в основе технологию. Вот пример использования PHP:

<?php
// index.php (Front Controller)
$request = $_SERVER['REQUEST_URI'];
$route = str_replace('.php', '', $request);
switch ($route) {
    case '/':
        // Homepage logic
        break;
    case '/about':
        // About page logic
        break;
    // Add more routes as needed
    default:
        // 404 logic
        break;
}