Показать сообщение отдельно
  #12 (permalink)  
Старый 06.06.2012, 00:28
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

вот мой вариант на всех сайтах:
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!" );
}
но мне этого делать не приходится.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием