Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mod_rewrite]Jedno konkretne pytanie
Forum PHP.pl > Forum > PHP
envp
Witam,
Mam do was pytnko, czytalem na forum posty ludzi o mod_rewrite, czytalem artykul, gdzieś w jakimś zakamarku polskiej pajęczyny, ale zrozumieć jednej rzeczy nie mogę - a mianowicie, żeby przekazać zmienne do skryptu 'z pomocą' mod_rewrite, trzeba jakoś ten moduł obsługiwać w tym skrypcie ?

chodzi mi mianowicie o taka sprawe, ze :

http://strona.pl/index.php?action=Error404 moge zmienic z pomocą m_rwrt :

na:

http://strona.pl/action/Error404 ?

, gdzie Error404 ma sie rozumiec jest zmienna.

Pozdrawaim, Kamil.
Apo
w skrypcie nie obsługujesz modrewrite jedynie tworzysz plik .htaccess który będzie odpowiednio przekształcał nice urle na te już poprawne:

Kod
RewriteEngine ON
RewriteBase /
RewriteRule action/(.+) index.php?action=$1 [L]
envp
Przepraszam, a mogę wiedzieć skąd to masz ? Jakiś sensowny tutorial ?
Apo
na home.pl masz fajny tutorial.
Prph
1. Zend Framework, obiekt Routera. W polskim manualu ZF jest nawet dobrze opisany mechanizm routingu we frameworku.
2. Przedstawiony tu sposob chyba nie jest najlepszy. A co kiedy URL wyglada jakos tak: strona.pl/?param=value&param2=value2&...&paramN=valueN?

Lepiej zrobic rewrite tak aby doklejal request po index.php/, np:

Normalnie: strona.pl/param/value
Rewrite: strona.pl/index.php/param/value.

Wtedy string param/value trafia do $_SERVER['PATH_INFO'];

Przyklad obslugi takiego rozwiazania (klasa Router z mojego frameworka):

  1. <?php
  2.  
  3. /**
  4.  * RewriteRouter is useful with mod_rewrite engine.
  5.  *
  6.  * URI should looks like:
  7.  * <a href="http://your.domain.here/action/Controller/parameter1/value1" target="_blank">http://your.domain.here/action/Controller/parameter1/value1</a>
  8.  *
  9.  */
  10.  
  11. final class RewriteRouter extends AbstractRouter
  12. {
  13. public function __construct()
  14. {
  15. parent::__construct();
  16.  
  17. /**
  18. * Sprawdzi, czy ustawiono mod_rewrite. Tylko wtedy PATH_INFO istanieje. 
  19. */
  20.  
  21. if(empty($_SERVER['PATH_INFO']))
  22. {
  23. $sError = 'You have to set rewrite rule';
  24. throw new RouterException($sError);
  25. }
  26. }
  27.  
  28. public function execute()
  29. {
  30. $sPathInfo = $_SERVER['PATH_INFO'];
  31.  
  32. $aPath = array();
  33.  
  34. /**
  35.  * Kilka zabiegow, koniecznych do sprawdzenia, czy podano jakies parametry.
  36.  */
  37.  
  38. if(!is_null($sPathInfo))
  39. {
  40. if(strlen($sPathInfo) > 1)
  41. {
  42. $sPathInfo = substr($sPathInfo, 1, strlen($sPathInfo));
  43.  
  44. if(substr($sPathInfo, strlen($sPathInfo) - 1) == '/')
  45. $sPathInfo = substr($sPathInfo, 0, strlen($sPathInfo) - 1);
  46.  
  47. $aPath = explode('/', $sPathInfo); // rozbijamy nasz request na tablice.
  48. }
  49. }
  50.  
  51. $aParameters = array();
  52.  
  53. if(count($aPath))
  54. {
  55.  
  56. /**
  57. * _parseRequest zlozy nam parametry do tablicy asocjacyjnej: param => value. 
  58. */
  59.  
  60. $aParameters = $this->_parseRequest($aPath);
  61.  
  62.  
  63. // A tu to juz kwestia zwiazana z frameworkiem.
  64.  
  65. if(!empty($aParameters[$this->_sActionAccessor]))
  66. $sController = $aParameters[$this->_sActionAccessor];
  67. else
  68. $sController = $this->_sDefaultAction;
  69. }
  70. else
  71. $sController = $this->_sDefaultAction;
  72.  
  73. $oToken = new DispatchToken($sController, $aParameters);
  74.  
  75. return $oToken;
  76. }
  77.  
  78. private function _parseRequest($aRequest = array())
  79. {
  80. $aParmeters = array();
  81. $aValues = array();
  82. $aParsed = array();
  83.  
  84. for($i = 0; $i < count($aRequest); $i++)
  85. {
  86. if($i % 2 == 0)
  87. $aParmeters[] = $aRequest[$i];
  88. else
  89. $aValues[] = $aRequest[$i];
  90. }
  91.  
  92. for($i = 0; $i < count($aParmeters); $i++)
  93. $aParsed[$aParmeters[$i]] = $aValues[$i];
  94.  
  95. return $aParsed;
  96. }
  97. }
  98.  
  99. ?>


Adrian.
NetJaro
Co do artykułów n/t mod_rewrite polecam Google.pl. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.