Задать вопрос
@sm_book

Динамический контент на php + чпу. Как реализовать?

Изучаю php и встал в тупик день назад )
Что задумывается : сайт с динамическим контеном + чпу чтобы эти ссылки в нормальный вид пришли
сначала хочу сделать просто чтоб это работало. Сейчас работает либо чпу, либо подгрузка контента. Вместе это все выводит ошибку в ajax.php
Warning: include(Z:\home\hiapi.ru\www\contacts) [function.include]: failed to open stream: Permission denied in Z:\home\hiapi.ru\www\ajax.php on line 5

Warning: include() [function.include]: Failed opening 'contacts' for inclusion (include_path='.;C:\php\pear') in Z:\home\hiapi.ru\www\ajax.php on line 5

Наверно что-то не так с этим if(!empty($_POST['uri'])){
Прошу помощи )

Это index.html
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />			
		<script type="text/javascript" src="/js/jquery-1.9.0.min.js"></script>
		<script type="text/javascript" src="/js/script.js"></script>		
	</head>
	<body>
		
<!--Блок ссылок для переключения страниц-->	
<div id='control'>
<a href="about">О нас</a>
<a href="contacts">Контакты</a>
</div>		
		
<div id='data'>
<!--Блок для вывода динамического контента-->	
</div>	

</body>
</html>


это .htaccess
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1


index.php
<?php

class Router {
    private $_route = array(); //Переменная хранит маршруты, и файлы, которые будут открываться при определеном маршруте

    /**
     * Метод для установки маршрута, и файла который будет открываться при заданом маршруте
     * @param <string> $dir - маршрут
     * @param <string> $file - адрес файла
     */
    public function setRoute($dir, $file) {
        $this->_route[trim($dir, '/')] = $file;
    }


    public function route() {
        if (!isset($_SERVER['PATH_INFO'])) { //Если открыта главная страница
            include_once 'index.html'; //Открываем файл главной страницы
        } elseif (isset($this->_route[trim($_SERVER['PATH_INFO'], '/')])) { //Если маршрут задан
            include_once $this->_route[trim($_SERVER['PATH_INFO'], '/')]; //Открываем файл, для которого установлен маршрут
        }
        else return false; //Если маршрут не задан
        
        return true;
    }
}
$ajax = true; 
if(!empty($_POST['uri'])){
  include $_POST['uri'];
}

$route = new Router;
$route->setRoute('about', "1.html"); //Устанавливаем маршрут , и файл который будет открываться при этом маршруте
$route->setRoute('tel', "2.html");
if (!$route->route()) { //Если маршрут не задан..
    echo 'Маршрут не задан';
}


ajax.php
<?php 
// Подгружает страницу указаную в $_POST['uri']

if(!empty($_POST['uri'])){
  include $_POST['uri'];
}


script.js
$(document).ready(function(){

	// получаем текущий uri, если uri не существует то присваиваем uri первой страницы 
	var thisUri = getThisUri()?getThisUri():'page1.php';
	
	//сразу задаем параметры для текущего состояния
	history.replaceState({uri:thisUri}, null, thisUri);
	
	// клик на ссылки переключения страниц
	$('#control a').click(function(){	 
	
	  // получем путь к запрашиваемой странице
	  var uri = $(this).attr('href');
	  
	  //создаем новую запись в истории только когда кликаем по ссылке
	  history.pushState({uri:uri}, null, uri);
	  
	  // открываем страницу
	  openPage(uri);	  
	  return false;
	});
	
	// обработчик нажатий на кнопки браузера назад/вперед 
	$(window).bind('popstate', function(event) { 
      openPage(history.state.uri);	
	});

	/**
	 * Загрузка запрашиваемых страниц с сервера
	 */
	function openPage(uri){
	// динамическая загрузка контента
	  $.ajax({
        type: "POST",
        url: "/ajax.php",
        data: {
		  uri: uri
		},
        cache: false,        
        success: function(data){  
		  // вывод в блок <div id="data">
          $('#data').html(data);
        }
      });
	}
	
	/**
	 * Возвращает текущий URI страницы
	 */
	function getThisUri(){
	   var loc = event.location 
		|| ( event.originalEvent && event.originalEvent.location )
		|| document.location;		
	    return loc.pathname.substr(1);
	}	  

	
});
  • Вопрос задан
  • 1586 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Не стоит подключать вот так любые файлы которые указаны в запросе. Злоумышленник может проявить фантазию в запросах.

Посмотрите как другие делают роутинг
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы