2012-01-25 7 views
5

Występuje nieprawidłowe zachowanie przy użyciu metody Zend _redirect.Zend _redirect error: przedrostek adresu podstawowego dwa razy:

Moja kopie wniosku są przekazywane za pośrednictwem dowiązania symbolicznego w mojej DocumentRoot. Również mój router domyślny jest dostosowany do reagowania na tego wzoru:

http://localhost/<appSymLink>/<param_A>/<controller>/<action>/

z kontrolera, skonstruować URL tak:

$url = $this->_helper->url('action', 'controller', $param_A = 'valueA');

Gdybym dostęp url:

http://localhost/<appSymLink>/<param_A>/<controller>/<action>/

Zmienna ta zawiera następujący ciąg:

/<appSymLink>/<param_A>/<controller>/<action>/

I kiedy zadzwonić

$this->_redirect($url);

Użytkownik jest wyraźnie skierowane do tej ścieżki, z nadmiarowych ścieżek bazowych.

/<appSymLink>/<appSymLink>/<param_A>/<controller>/<action>/

Zend wydaje się poprzedzenie ścieżki dna dwukrotnie.

Kopia wniosku mojej współpracownicy znajduje się w jego numerze DocumentRoot i nie doświadcza tego problemu.

Definiowanie pustą ścieżkę bazową wewnątrz działania, tuż przed operacją, działa tak:

$this->getRequest()->setBaseUrl('');

Nie jest to oczywiście możliwe rozwiązanie. Z drugiej strony, wykonanie tego w wtyczce kontrolera pod numerem routeShutdown eliminuje oba wystąpienia katalogu aplikacji.

Czy ktoś ma poradę w celu rozwiązania tego problemu, lub jakichkolwiek wskazówek dotyczących szukania w nim czterech?

Odpowiedz

6

W przypadku przekierowania za pomocą adresu URL wygenerowanego przez pomocnika Url należy poinformować readresatora, że ​​jest już poprzedzony podstawowym adresem URL.

Wystarczy kliknąć na poniższy

return $this->redirect($url, array('prependBase' => false)); 
4

spróbować ustawić prependBase opcja FALSE:
$this->_redirect($url, array('prependBase' => FALSE);

Excerpt from ZF reference:

_redirect($url, array $options = array()): redirect to another location. This method takes a URL and an optional set of options. By default, it performs an HTTP 302 redirect.

The options may include one or more of the following:

exit: whether or not to exit immediately. If requested, it will cleanly close any open sessions and perform the redirect.

You may set this option globally within the controller using the setRedirectExit() accessor.

prependBase: whether or not to prepend the base URL registered with the request object to the URL provided.

You may set this option globally within the controller using the setRedirectPrependBase() accessor.

code: what HTTP code to utilize in the redirect. By default, an HTTP 302 is utilized; any code between 301 and 306 may be used.

You may set this option globally within the controller using the setRedirectCode() accessor.

jeśli praca ta nie robi może Proponuję pomocnika działania 'Redirector' powszechnie używane:
$this->_helper->getHelper('Redirector')->gotoSimple($action, $controller = null, $module = null, array $params = array())
Action Helper Redirector

Powiązane problemy