Jump to content
php.lv forumi

more mod_rewrite


hmnc

Recommended Posts

Sveiki! Par cik izbraukājot googli un vēl visādus resursus sev neko piemērotu neatradu (ok, ok, laika arī galīgi nav :/ ), tad jautāšu šeit:

 

virtuālais urlis: lapa.lv/aa/bb/cc/

reālais: index.php?p1=aa&p2=bb&p3=cc

 

problēma sākas tur, ka nevar dabūt *reāli eksistējošu* folderus (kas ir pilnīgi loģiski, jo tie tiek padoti uz mainīgo $p1), bet priekšā neko likt negribās, jo tas uzreiz bojā skatu (šādi neder - lapa.lv/page/aa/bb/cc/, resp - "page" tiek padots caur .htaccess, kā statiska vērtība pirms dinamiskajām, lai atstātu piekļuvi reālajiem folderiem uz rootdir)

darba variants ar ko es čakarējos ir šāds:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9_]{1,})/([a-z0-9_]{1,})/([a-z0-9_]{1,}) index.php?p1=$1&p2=$2&p3=$3 [QSA,L]
RewriteRule ^([a-z0-9_]{1,})/([a-z0-9_]{1,}) index.php?p1=$1&p2=$2 [QSA,L]
RewriteRule ^([a-z0-9_]{1,}) index.php?p1=$1 [QSA,L]

 

tātad - no šī piemēra izejot vajag dabūt tā, lai ir piekļuve reāli eksistējošiem folderiem.

 

varbūt ķāds var izlīdzēt ar padomu :)

 

paldies.

Link to comment
Share on other sites

URLs var būt

 

/admin/modulis/page/parms1/parms2 (default language)

/lv/modulis/page/parms1/parms2

/lv/modulis/parms1/parms2

/modulis/page/parms1/parms2 (default application, language)

/modulis/parms1/parms2 (default application, page, language)

/lv/admin/modulis/page/parms1/parms2

 

 

Bet tas ir atkar;igs kā tu uzrakstītsi REQUEST apstrādi... tobiš visa loģika ir nevis iekš mod_rewrite, bet iekš PHP... mod_rewrite pilda tikai "netiešo pāradresēšanu"

 

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [QSA]

 

function initFromRequest($request) {
	# Parse request
	$m = explode('/',$request);
	foreach ($m AS $i=>$v)
	{
		if ($v=='') unset($m[$i]); # remove empty nodes (//)
	}
	$m = array_values($m);

	# Check language (first parameter in string)
	$this->_sys_locales = & $GLOBALS['SYS_LOCALES'];
	if ( !empty($m[0]) && !empty($this->_sys_locales[$m[0]]) )
	{
		$this->_sys_locale = $m[0];
		array_shift($m); // we do not need it in call stack
	}

	# Check modal handling
	if ( !empty($m[0]) && $m[0]=='modal'  )
	{
		$this->isModal = true;
		array_shift($m); // we do not need it in call stack
	}

	# Check modal handling (if broken LOCALE)
	if ( !empty($m[1]) && $m[1]=='modal'  )
	{
		$this->isModal = true;
		unset($m[0]); // broken LOCALE
		unset($m[1]); // we do not need it in call stack
	}

	# Init application
	if ( !empty($m[0]) && is_dir('apps/'.$m[0]) ) {
		$this->_sys_application = $m[0];
		array_shift($m);
	}

	# Now we have clean call stack
	$this->_sys_callstack = $m;

	//print formatArr($this);

	return false;
}

Link to comment
Share on other sites

Un vispār... es iesaku parametrus nelikt kā direktorijas... bet kā normālus.

mod_rewrite domāts lai paslēptu visu reālo struktūru un tādā veidā rādīt ~ biznes-loģiku

 

/lv/products/browse/pccomponents/cpu (tas ir iznjemums, kad parametrs ir "DB kategorija")

 

/lv/products/viewitem/1001/?fulldescr=true

Link to comment
Share on other sites

Nu pag ja jau tev tas rewrite ir ielikts root direktorijā tad jau viņš nekādīgi netraucē eksistējošiem (reāliem) folderiem, jo rewrite rule sāk strādāt tikai tad kad reāli folderis neeksistē:

 

RewriteCond %{REQUEST_FILENAME} !-d

 

jebšu es nesaprotu ko vēlams panākt?

Link to comment
Share on other sites

×
×
  • Create New...