PHP: Первая страничка и умная ссылка

Предварительно предполагается что Вы установили себе «джентельменский набор» — связку Apache+Php и можете запустить пример сразу при прочтении. Это хороший практический способ понять — взять и попробовать

Очень просто словить вход на сайт — это просто index.php (если Вы взяли настройки по умолчанию)

index.php

<?php
echo 'HELLO WORLD';

Но мы не хотим просто сайт из одной странички, мы обычно хотим хотябы две) Можно конечно создать так

index.php

<?php
echo '<a href="second.php">HELLO WORLD AND GOTO SECOND</a>';

second.php

<?php
echo '<a href="index.php">HELLO WORLD AND GOTO FIRST</a>';

Но вот честно представьте как это выглядит когда страниц много….

Магия .htaccess

В корне сайта создаем настроечный файл для вебсервера (для Апача это .htaccess), в котором описываем что при любом запросе, когда нет такого файла или директории, мы хотим чтобы отрабатывался наш индексный файл. Теперь нам достаточно одного файла и любой урл будет задействовать его

.htaccess

RewriteEngine on
RewriteRule ^.htaccess$ - [F]
RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Попробуйте вызвать теперь несколько раз свой сайт с разными путями, например http://localhost/something/new/with?params=1 В запросе будет отличный параметр) Плюс все данные просто отправленные тоже будут (это важно — могут быть и формы нужны))))

index.php

<?php
var_dump($_REQUEST);

Роутинг

Красивым словом Роутер в подавляющем количестве распространенных решений называют функцию / класс / объект класса, который должен перенаправить собственно запрос на нужный нам кусочек кода (Контроллер в MVC схеме). Поэтому мы можем сейчас поиграться — например так… Специально упрощенная схема (для приведения принципа работы). У вас могут быть регулярки путей, спецправила и все что угодно — но по сути Вы просто извлекаете из «ссылки» нужное действие)

index.php

<?php
try {
	$result = route(@$_REQUEST['q']);
	echo $result;
	exit;
} catch (Exception $e){
	$e->getTraceAsString();
}
 
function route($uri) {
	$uri_parsed_big = parse_url($uri);
	$uri_path = $uri_parsed_big['path'];
 
	$uri_parsed = explode('/', $uri_path);
	$controller_name            = 'Index';
	if (count($uri_parsed)) {
		$controller_name = array_shift($uri_parsed);
		if (!$controller_name) {
			$controller_name = array_shift($uri_parsed);
		}
		if (!$controller_name) {
			$controller_name    = 'Index';
		}
	}
	return 'WILL RUN ' . $controller_name;
}

Оставить комментарий

XHTML: Вы можете использовать такие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">