Разрешить htaccess выполнить скрипт из подпапки
Если у вас на сервере работают правила .htaccess Но если в корне сайта создать любую папку и залить туда сторонний скрипт, то htaccess не дает запустить сторонний скрипт из браузера. что делать?
Проблема связана с тем, что файл .htaccess в корне сайта может содержать правила перезаписи (rewrite), которые применяются и к подпапкам. Это часто случается при использовании CMS (например, WordPress, Joomla, MODX и т.д.), где .htaccess настроен так, чтобы все запросы направлялись в ядро CMS для обработки маршрутов.
Возможные причины:
- Правила
RewriteCond/RewriteRuleперехватывают все запросы, даже к подпапкам. - В CMS могут быть настроены глобальные правила, которые не исключают существующие директории.
- Отсутствует проверка на существование файла или директории перед перезаписью.
Как это исправить?
Проверьте содержимое .htaccess
Найдите там блок правил mod_rewrite, например:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Это типичный пример для CMS вроде WordPress. Он говорит:
«Если запрашиваемый файл или папка НЕ существует — отправь всё в index.php».
Всё правильно, но если вы создаёте подпапку, и хотите, чтобы она работала отдельно от CMS — убедитесь, что правила не перехватывают её.
Добавьте исключение для вашей папки
Допустим, вы создали папку /test/. Чтобы CMS не перехватывала запросы к ней, измените .htaccess в корне следующим образом:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Исключаем существующие файлы и папки
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Добавляем условие: если URI не начинается с /test/
RewriteCond %{REQUEST_URI} !^/test/ [NC]
# Тогда направляем в index.php
RewriteRule . /index.php [L]
</IfModule>
Объяснение:
!^/test/— исключает из перезаписи любые URL, начинающиеся с/test/[NC]— нечувствителен к регистру
Создайте свой .htaccess в подпапке
Если вы заливаете сторонний скрипт в папку /test/, то добавьте в неё собственный .htaccess, например:
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
Или просто определите базовые настройки, чтобы CMS не влияла на поведение этой директории.
Проверьте настройки хостинга / сервера
Иногда хостеры используют настройки на уровне vhost, которые применяют .htaccess из корня ко всем подкаталогам. Это редко, но возможно. Если ничего не помогает — уточните у техподдержки хостинга.
Итог
Чтобы ваш сторонний скрипт в подпапке работал нормально:
✅ Убедитесь, что в основном .htaccess CMS есть исключения для ваших подпапок через RewriteCond %{REQUEST_URI} !^/имя_папки/
✅ Создайте в подпапке отдельный .htaccess с отключённым RewriteEngine
✅ Проверьте, что файлы действительно доступны по прямой ссылке (нет ошибок 403, 404)
Share this content:



Отправить комментарий