parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

делается это для чистоты строки URI

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, но при динамическом наполнении сайта это утопия. Передать строку ури в страницу обработчик, вычислить и отдать нужную страницу - обычный финт.