Dlaczego na niektórych serwerach przekierowania spowodować mogą błąd 500 (Internal Error. The server encountered an internal error and could not complete your request)?
Na przykład u mnie na lokalhoście kod (Zend_Framework):
Kod
$this->_redirector->gotoRouteAndExit(array('id' => $quiz_id), 'quiz_info');
działa poprawnie, ale wykracza się na serwerze produkcyjnym.
Po paru prostych testach doszedłem do wnioski, że przy przekierowaniu tworzy się pętla nieskończona.
Dlaczego? Czy błąd tkwić może w niewłaściwie ustawionym baseUrl?
Poniższy kod na serwerze produkcyjnym działa poprawnie:
Kod
// set previous url
if (isset($_SERVER['HTTP_REFERER'])) {
$previousUrl = $_SERVER['HTTP_REFERER'];
}
else {
$previousUrl = BASE_URL;
}
$this->_redirect($previousUrl);
if (isset($_SERVER['HTTP_REFERER'])) {
$previousUrl = $_SERVER['HTTP_REFERER'];
}
else {
$previousUrl = BASE_URL;
}
$this->_redirect($previousUrl);
ps.
Podejżewam, że problem ten nie dotyczy bezpośrednio Zend Framework, podobne rzeczy dziać mogą się przy zwykłych przekierowaniach. Plik .htaccess mam raczej dobrze skonfigurowany, nie ma tam żadnych dziwactw mogących psuć przekierowania.