В PHP-платформе Wad-er динамические адреса формируются в зависимости от применяемого механизма формирования страницы – MVC-1 или MVC-2:
Более подробно процесс формирования URL описан в разделе Контроллер.
При формировании адреса страницы PHP-платформа Wad-er использует методику «дружественных URL» (friendly url). Такой механизм преобразования URL более понятен пользователям и способствует оптимизации сайта в поисковых системах, потому как поисковые роботы предпочитают статические URL типа content.html.
Преобразованием адресов занимается модуль Mod_Rewrite, который настраивается на сервере Apache. В веб-приложении он используется как внутренние директивы файла .htaccess.
Содержимое файла .htaccess в платформе Wad-er выглядит следующим образом:
#php_value magic_quotes_gpc 0 #php_value register_globals 0 #php_value display_errors 0 #php_value magic_quotes_runtime 0 #php_value mb_internal_encoding UTF-8 #Options +FollowSymlinks RewriteEngine On RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC] RewriteRule .* - [F,L] RewriteRule \.(jpg|jpeg|png|gif|ico)$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?_alias_= [L,QSA]
Директива Options +FollowSymlinks позволяет использовать символические ссылки на файлы или каталоги (cимволические ссылки в *nix-системе - это что-то типа ярлыков в Windows). Их удобно использовать, когда файл-оригинал находится по неизменному пути.
Директива RewriteEngine On сообщает о том, что на сайте будет работать механизм mod-rewrite.
RewriteBase / указывает, что все преобразования адресов должны проводиться относительно корневого каталога сайта. Если ваш сайт лежит во внутреннем каталоге, а не в корне, после слеша укажите название каталога, где лежит сайт: RewriteBase /site (где /site - ваш каталог).
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC] запрещает доступ поисковому роботу (юзер-агенту), если в его названии содержится internal\, dummy\, connection. NC - игнорируем регистр букв ('dummy' == 'Dummy').
RewriteRule .* - [F,L] определяет, что именно нужно делать, когда робот запросит доступ. Регулярное выражение '.*' означает: 'Доступ ко всем файлам запрещен'. Здесь F - 'запрещающий' флажок (Forbidden).
Две следующие директивы ставят условие для правила, которое идет ниже:
RewriteCond %{REQUEST_FILENAME} !-f - если по данному пути не существует файл (запрошенный адрес не должен быть путем к файлу),
RewriteCond %{REQUEST_FILENAME} !-d - если по данному пути не существует каталог,
выполняем следующее правило: RewriteRule ^(.*)$ index.php?_alias_= [L,QSA]
Приведенные выше правила сообщают mod-rewrite, как именно преобразовывать адрес страницы. Правила имеют следующий формат:
RewriteRule текущий URL перезаписываемый URL.
Здесь текущий URL - то, что пользователь видит в адресе страницы, перезаписываемый URL - то, что на самом деле исполняет сервер.
Зная основные символы регулярных выражений, читаем данное правило как: любой адрес преобразовать к виду: index.php?_alias_=page.html, где page.html - то, что видит пользователь в адресной строке. Переменная - "backreferences", это контейнер временной памяти, в котором содержится значение между группирующими скобками - (.*).
Директива - php_flag magic_quotes_gpc Off - отключение "магических кавычек". Если php работает как модуль Fast CGI, эту директиву нужно закомментировать (#). По умолчанию friendly urls отключены:
$friendly_urls = false; //файл config/config.php
Включение friendly URL. Для того чтобы включить friendly URL, необходимо сделать следующее:
$friendly_urls = true;
Работа с friendly URL описана в классе pageParser, метод _init().
$this->config['friendly_urls'] = (isset($friendly_urls)) ? $friendly_urls : false; $this->config['friendly_urls_suff'] = '';
Добавление к странице псевдонима (алиаса). Система Wad-er предоставляет возможность добавлять к страницам псевдонимы (алиасы) прямо в панели управления. Псевдоним к странице можно добавить в ее карточке на вкладке SEO. В поле Псевдоним необходимо ввести адрес, по которому будет открываться страница.
Например, если вы введете алиас page, страница откроется по адресам:
Последний вариант возможен только при включенных Friendly URL.
Механизм реализации Friendly URL. Созданием адресов страниц занимается метод makeUrl() класса pageParser. Вызов этого метода можно сделать таким образом:
$parser->makeUrl($id, $argsa, $segments, $site_url);
Здесь:
$id - ID или алиас (псевдоним) страницы,
$argsa - дополнительные параметры в адресе страницы. В $argsa может содержаться или строка, или массив, т.е. может быть такой вызов метода:
$argsa = array("query=1","query2=2"); $parser->makeUrl('my_item_page', $argsa);
$segments - способ передачи параметров. Если $segments = false, то url строится так
http://site.com/controller/action/имяпараметра1/параметр1/имяпараметра2/параметр2...
Если true, то http://site.com/controller/action/параметр1/параметр2...
$site_url если надо дать абсолютный адрес, включая http://. Иначе дается сокращённый адрес - /ext/forum/index.
Работа парсера с URL происходит следующим образом:
Если у страницы есть псевдоним (алиас), URL должен выглядеть так: http://site.com/index.php?pageid=alias&query=1&query2=2, где alias – алиас страницы.
Для получения идентификатора страницы в классе pageParser есть метод getPageId(). В зависимости от механизма построения страницы (MVC-1 или MVC-2) определяются сегменты адреса. При этом происходит проверка: если в адресе содержится псевдоним страницы, из БД выбирается псевдоним. Далее если страница содержит другие get-параметры, они временно сохраняются в памяти. На выходе мы получаем ID текущей страницы.
Более подробно процесс использования псевдонима страницы описан в Контроллер.