Как настроить конфигурационный файл без использования расширения .php?

Как настроить сервер, чтобы все запросы, если файла не существует, направлялись на index.php, а если файл существует, загружался этот файл (картинки, css и т. д.). Также необходимо удалить расширение .php из всех адресов (.php -> ''). Я пробовал различные способы, но ничего не получается.
  • 21 января 2024 г. 4:08
Ответы на вопрос 2
Вы можете использовать файл `.htaccess` для настройки веб-сервера Apache, чтобы выполнить то, что вы описали: направлять запросы на `index.php` при отсутствии запрашиваемого файла и переписывать URL для удаления расширения `.php`. Вот пример конфигурации, которую можно использовать в файле `.htaccess`:

```apache
RewriteEngine On

# Проверяем, является ли запрос запросом к файловой системе,
# например, к изображению, css, js и т.д.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Если файл или директория не найдены, перенаправляем запрос на index.php
RewriteRule ^ index.php [QSA,L]

# Настройка для удаления расширения .php из URL.
# Перенаправляем запросы с .php на URI без .php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.php$ /$1 [R=301,L]

# Если запрос сделан без расширения .php, но такой файл существует, его нужно использовать.
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [QSA,L]
```

1. `RewriteEngine On` включает использование модуля mod_rewrite для переписывания URL.

2. Первые две `RewriteCond` проверяют, не существует ли файл или директория, соответствующие запросу.

3. `RewriteRule ^ index.php [QSA,L]` перенаправляет все запросы, не соответствующие существующему файлу или директории, на `index.php`. Флаги `[QSA,L]` означают, что должны сохраниться все параметры запроса (Query String Append) и это последнее правило для текущего запроса (Last).

4. Второй блок правил удаляет расширение `.php` из URL, создавая постоянное перенаправление (301) со старого URL на новый.

5. Последний блок правил проверяет, существует ли файл с добавлением `.php` к текущему запросу; если да, то Apache подставит это расширение для выполнения запроса.

Убедитесь, что у вас включен модуль mod_rewrite (`sudo a2enmod rewrite` в Debian/Ubuntu) и что у вас есть права Override `AllowOverride All` в конфигурации VirtualHost или Directory вашего сайта.

Также важно помнить, что в целях безопасности вам может потребоваться настроить дополнительные правила, чтобы предотвратить доступ к важным системным или конфигурационным файлам через веб-сервер, таким как `.htaccess`, `.git`, конфигурации фреймворков и т.д.
Добавить internal в location ~ \.php$ { } 
C помощью error_page передать обработку ошибки в именованный location и там выполнить редирект (domain.oh/test.php -> domain.oh/test).

Или прямо в error_page собрать адрес domain.oh/test из отдельных переменных.
Похожие вопросы