вот мой вариант на всех сайтах:
DirectoryIndex index.php
RewriteEngine On
# Если запрос файла не index.php
RewriteCond %{REQUEST_FILENAME} !/index.php$
# и если запрос исполняемого файла, то-есть с расширением .php
RewriteCond %{REQUEST_FILENAME} .php$
# то добавим GET переменную с именем запрашиваемого
# исполняемого файла, которую у меня движок обрабатывает
# это правило дает возможность обойти проблему с запуском
# того что не желательно запускать напрямую
RewriteRule ^(.*) index.php?httpd_include_file=%{REQUEST_FILENAME} [QSA,L]
# Все прочие запросы кроме файлов ресурсов проходят через index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) index.php [L]
ну и сам index.php выглядит так:
<?php
/*
* Загружаем базовый файл конфигураций
*/
include_once dirname( __FILE__ )."/bootstrap.php";
/*
* Данный скрипт требуется для безопасности, так как все запросы проходят через индексный файл
* если запрос просит файл с рассширением .php
* обрабатываем это правило
*/
if ( isset( $_GET['httpd_include_file'] ) ) {
/*
* Разрешения на доступ к файлам
* ключ: содержит ссылку на файл требующий обращения, начиная от _DOCUMENT_ROOT
* значение: это цифра указывающая на метод доступа
*
* 0 - это значение разрешает обращатся к файлу только через AJAX
* 1 - это значение разрешает обращатся любым доступным методом
*/
$allow_include = array(
"/general/services/topdomain.php" => 0,
);
foreach( $allow_include as $allow_file => $access_method ) {
if (
( _DOCUMENT_ROOT.$allow_file == $_GET['httpd_include_file'] ) &&
( ( ( $access_method == 0 ) && ( _IS_AJAX ) ) ||
( $access_method == 1 ) )
) {
$include_file = $_GET['httpd_include_file'];
unset( $_GET['httpd_include_file'] );
// Если разрешения позволяют, переходим на данный скрипт и выходим
include_once $include_file;
exit;
}
}
}
/*
* Пердаем управление ядру
*/
include_once _INC_PATH."general/core.php";
?>
Если в списке массива
$allow_include не указан путь к файлу .php к которому разрешено обращатся напрямую, то запустить его будет не возможно указав путь в адресной строке браузера. Это защита позволяет уйти от таких проблем как ошибочный запуск не желательного, многие это решают добавлением в каждый файл подобной строки:
if ( !defined( "SITE_PATH" ) ) {
exit( "Hacking attempt!" );
}
но мне этого делать не приходится.