Я знаю, что это должно быть просто, но мне трудно написать правило .htaccess для моего фронт-контроллера.
В папке / themes / содержатся все мои css / js / images и т. Д., Поэтому я не наденуне хотят, чтобы они проходили через мой контроллер
.htaccess файл находится в корне папки / myadminarea /.
корень сайта (ниже '/ myadminarea' on '/'не имеет файла .htacess)
Внутри фронт-контроллера я просматриваю URL-адрес и затем напрямую включаю файл - однако я хочу быть довольно щадящим с URL-адресами, которые я принимаю ..
ЕслиURL-адрес для конкретного файла, который я хочу передать через фронт-контроллер
Если URL-адрес для каталога (конечная косая черта), я хочу предположить, что они ищут index.php в этой папке
Приведенное ниже правило работает для URL-адресов, подобных этому
mydomain.com/myadminarea/mysection/action/
(loads mydomain.com/myadminarea/mysection/action/index.php via the front controller)
, но относится к URL-адресам, подобным этому -
mydomain.com/myadminarea/mysection/action/index.php
, которые содержат имя файла (оно не использует переднийконтроллер, но просто загружает файл напрямую) - я знаюw! что! -f исключает правило перезаписи для файлов, но я пробовал каждую комбинацию, которую только могу придумать, и приведенное ниже, по крайней мере, работает для URL без имен файлов.Когда я пытаюсь направить КАЖДЫЙ запрос (кроме тех, которые находятся в папке тем), я получаю ошибку конфигурации сервера (500)
Это мое правило
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(themes)/ /myadminarea/index.php [NC,L]
edit:
Добавлен конденсированный фронт-контроллер
// what page is actually being requested?
$uri = explode("/", $_SERVER["REQUEST_URI"]);
//lose the first element and add index.php the last one if it is blank
array_shift($uri);
if (end($uri) == ''){
array_pop($uri);
$uri[] = 'index.php';
}
$page_requested = implode('/', $uri);
if ($page_requested == 'myadminarea/index.php'){
$page_requested = false;
}
includePage($page_requested);
function includePage($page_requested){
if ($page_requested && file_exists(BASE_FILE_PATH . $page_requested) && is_file(BASE_FILE_PATH . $page_requested)){
include(BASE_FILE_PATH . $page_requested);
} else {
echo $page_requested;
}
}