Блокировка файлов с помощью htaccess делает файлы недоступными для запрашивающей стороны, например, посетитель страницы. Таким образом, вам нужен прокси-файл, чтобы передать запрос посетителя файлам. Для этого посмотрите шаблон MVC и шаблон Front Controller .
По сути, вам нужно будет направить все запросы в одну точку входа , например, index.php и решите оттуда, какое действие (ваши скрипты) вызывается для обработки запроса. Затем вы можете разместить свои скрипты и шаблоны вне общедоступной папки или, если это невозможно (на некоторых общих хостах), защитить папки с помощью htaccess, как вы уже сделали (DENY FROM ALL).
Чтобы использовать скрипт загрузки, вы должны иметь URL-адрес, например http://example.com/index.php?action=upload
.
Сверхпростой FrontController так же прост, как
$scriptPath = 'path/to/your/scripts/directory/';
$defaultAction = 'action404.php';
$requestedAction = $_GET['action']; // you might want to sanitize this
switch($action) {
case 'upload':
$actionScript = 'image.php';
break;
case 'login':
$actionScript = 'login.php';
break;
default:
$actionScript = $defaultAction;
}
include $scriptPath . $actionScript;
exit;
После этого ваш actionScript будет делать все, что вам нужно сделать с запросом, включая перенаправление, доступ к базе данных, аутентификацию, загрузку содержимого, шаблоны рендеринга и т. Д. - все, что вы сочтете необходимым. Действие по умолчанию в приведенном выше примере может выглядеть следующим образом:
<?php // action404.php
header('HTTP/1.1 404 File Not Found');
fpassthru('path/to/template/directory/error404.html');
В PHP существует множество реализаций шаблона FrontController. Некоторые простые, некоторые сложные. В CodeIgniter Framework используется облегченная реализация MVC / FrontController, которая может быть не слишком сложной, если вы новичок в этом.
Как и в приведенном выше предложении Atli, вы можете использовать mod_rewrite
для принудительной отправки всех запросов на index.php, а также использовать его для настройки ваших URL. Это обычная практика для сред MVC, и она широко освещалась здесь и в других местах.