Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Przekierowanie 301
Forum PHP.pl > Forum > PHP > Frameworki
CzarnyGsm
Witam,

Chciałbym uruchomić nową stronę opartą na Zend. Po starej stronie została masa odnośników, dla których chciałbym zastosować przekierowanie 301. W jaki sposób użyć Zend Router do tego celu? Zaznaczam, że stara strona nie była oparta na Zend'zie i mam duża liczbę odnośników do przekierowania. Przykładowo index.php?plik=12345 chciałbym ustawić na kontrolera =>'files', akcję => 'view', id => '12345'. Dodatkowo czy oprócz tego istniałby sposób na automatycznie przekierowanie ze zmienną pozycją id ?

Z góry dziękuję za pomoc.

Pozdrawiam
pawv
  1. 'plik' => array(
  2. 'route' => 'index.php?plik=:id',
  3. 'defaults' => array(
  4. 'controller' => 'files',
  5. 'action' => 'view'
  6. ),
  7. ),


Wtedy parametr :id będzie przyjmował zmienne wartości
CzarnyGsm
Źle się wyraziłem w pierwszym poście. W starym serwisie mam odnośniki index.php?plik=12345, zaś w nowym file/title/12345. W jaki sposób mogę zrobić przekierowanie 301 z index.php?plik=12345 na file/title/12345 ? Zależy mi na tym, aby w wyszukiwarce google nastąpiła zamiana starych adresów na nowe.
Z góry dziękuję za pomoc.
KrzysiekWildfire
To w kontrolerze indexController sprawdzasz, czy masz $_GET['plik'] i zrobić przekierowanie na nowy adres. Google bez problemu poradzi sobie z tym.
CzarnyGsm
Czyli mówisz, aby najpierw w kontrolerze pobrać id pliku za pomocą $_GET['plik']. Następnie pobieram z bazy danych tytuł pliku. I co dalej? W jaki sposób zrobić trasę z index?plik=$id na ścieżkę file/$title/$id? Można prosić o kawałek kodu w jaki sposób przekierowuje na nowy adres?

Przykładowo na stronie opartej o Zend fw działa link http://localhost/file/demo-pes-11/352 , a na starym cms'ie mam adres http://staryadres.pl/index.php?plik=352 .
Mam ustawioną wcześniej taką ścieżkę.
  1. file.type = "Zend_Controller_Router_Route_Regex"
  2. file.route = "file/(.+)/(.+)"
  3. file.defaults.module = "default"
  4. file.defaults.controller = "file"
  5. file.defaults.action = "view-file"
  6. file.map.1 = "tytul"
  7. file.map.2 = "id"
  8. file.reverse = "file/%s/%d"


Z góry dziękuję za pomoc.
amii
1. Zrób routing starych adresów
  1. $route = new Zend_Controller_Router_Route_Regex(
  2. 'index.php?plik=(\d+)',
  3. 'controller' => 'file',
  4. 'action' => 'old'
  5. ),
  6. 1 => 'plik'
  7. )
  8. );




2. zrób akcję do obsługi starych URL-i coś na kształt:

  1. public function oldAction()
  2. {
  3.  
  4.  
  5. $id = $this->_getParam( 'plik' );
  6. // zmienną $tytul musisz pobrać z bazy szukając po id
  7.  
  8. $this->_redirect( 'file/'.$tytul.'/'.$id,
  9. array( 'code' => 301 )
  10. ); //przekierowanie na nową akcję
  11. }

CzarnyGsm
Super, o to mi chodziło. Dzięki wielkie! Tylko jest jeden bardzo poważny problem za każdym razem jak wpiszę adres np. http://localhost/index.php?plik=26 ładuje się strona główna. Problem leży po stronie adresu z index.php :/ Zapewne winę ponosi linijka z zawartością
  1. RewriteRule ^.*$ index.php [NC,L]
w pliku .htaccess . Niestety, ale wymazanie linijki z plik nie wchodzi w grę bo strona się 'sypie'. Próbowałem kilku sposobów aby to poradzić sobie z tym, ale niestety nie udało się ;/ Dlatego proszę jeszcze o pomoc w rozwiązaniu tego problemu.

Sprawdziłem dla pewności czy kod działa dla innej formy, aby się upewnić czy nie był to błąd po mojej stronie. Także jeżeli ustawię ścieżkę starych adresów np. w taki sposób:
  1. old.type = "Zend_Controller_Router_Route_Regex"
  2. old.route = "index/plik/(\d+)"
  3. old.defaults.module = "default"
  4. old.defaults.controller = "file"
  5. old.defaults.action = "old"
  6. old.map.1 = "plik"
  7. old.reverse = "index/plik/%d"

To wszystko ładnie przekierowuje, ale niestety adresy typu http://localhost/index/plik/123 nie bardzo mi się nada.
Z góry dziękuję za pomoc w rozwiązaniu problemu.

#### EDIT ####
Problem rozwiązany. Należało zawartość z akcji old przenieść do akcji index kontrolera IndexController. Aha, naturalnie robienie routingu do starych adresów w tym przypadku nie ma sensu.
Dziękuje amii za pomoc w rozwiązaniu problemu i za poświęcony czas wszystkim tym, którzy czytali mój problem, ale po prostu nie wiedzieli jak pomóc.
W woli ścisłości to aby jeszcze nie wyskakiwały nam błędy to zawartość w akcji index w kontrolerze IndexController powinna wyglądać tak:
  1.  
  2. public function indexAction()
  3. {
  4. $id = $this->_getParam( 'plik' );
  5. if( $id ) {
  6. // sprawdzenie czy rzeczywiście istnieje taki plik w bazie, jeśli nie to przekieruj na stronę błędu
  7. // pobranie $tytul pliku o zadanym $id
  8.  
  9. //w przekierowaniu powinien być dodatkowo ../ bez tego przekieruje nas na adres http://localhost/index.php/file/title/1233
  10. $this->_redirect( '../file/'.$tytul.'/'.$id,
  11. array( 'code' => 301 )
  12. );
  13. }
  14. }


Pozdrawiam
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.