| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
agat 10.07.2007 10:13 / 10.07.2007 10:42
Делается обычным мод_рирайтом Апача. Все несуществующие страницы передаются в страницу-обработчикRewriteEngine On
RewriteBase /
# прикрываем картинки
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://mysite.com/.*$ [NC]
RewriteRule \.(gif|jpg|bmp|png)$ - [F]
# все в индекс
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /process.html [L,QSA]process.html @main[] ^Request:process[]Request.p
@CLASS
Request
################################################
@auto[][sUri]
$sQuery[$request:query]
$sUri[$request:uri]
$sUri[^sUri.split[?;lh]]
$sPath[$sUri.0]
$tBasePath[^sPath.split[/]]
^if($tBasePath){
$tBasePath[^tBasePath.select(^tBasePath.line[] > 1)]
}
^if($tBasePath.piece eq "ru" || $tBasePath.piece eq "en" || $tBasePath.piece eq "tr"){
$sLanguage[$tBasePath.piece]
}
^if(def $sLanguage){
$tPath[^tBasePath.select(^tBasePath.line[] > 1)]
$sPath[/^if($tPath){^tPath.menu{$tPath.piece/}}]
}{
$tPath[$tBasePath]
}
# end of @auto[]
################################################
@makePath[hParams]
^if(def $hParams.sLanguage){
$result[/$hParams.sLanguage/^tPath.menu{$tPath.piece/}^makeUri[
$.hExclude[
$.groupID[]
$.itemID[]
]
]]
}
# end of @makePath[]
################################################
@process[][bFound]
$bFound(0)
^if(-f $sPath || -d $sPath){
$bFound(1)
^Lib:location[$sPath^makeUri[]]
}{
^if($tPath){
^tPath.menu{
$sGroupUri[$tPath.piece]
}
$tGroup[^Group:get[
$.uri[$sGroupUri]
$.state[^State:getIndex[active]]
]]
^if($tGroup){
$bFound(1)
^Lib:location[/?groupID=$tGroup.id]
}
}
}
^if(!$bFound){
^Lib:location[/404/]
}
# end of @process[]Таким образом я упрощаю жизнь пользователям. Никто не станет спорить, что /product/wear/helmet/ запомнить намного проще, чем ?groupID=123&items=helmet&something=else&more=brainfucking&so=on. Можно, конечно, писать километры рирайт_рулов в .htaccess, но при динамическом наполнении сайта это утопия. Передать строку ури в страницу обработчик, вычислить и отдать нужную страницу - обычный финт.