O roteamento funciona no host local, mas não no servidor ao vivo
-
20-09-2019 - |
Pergunta
Quando eu acesso meu site no MAMP como assim, funciona muito bem
localhost/site/about-us/
Quando o carrego para o meu servidor remoto e o acessio assim
Todas as solicitações remontam ao 'padrão' configurado em bootstrap.php
.
Aqui está minha configuração de rota.
Route::set('default', '(<page>)')
->defaults(array(
'page' => 'home',
'controller' => 'page',
'action' => 'index',
));
O problema é que, sempre que é carregado no meu servidor, qualquer solicitação como / about-us / está sempre inadimplente para casa conforme especificado ao definir a rota. Se eu alterar esse padrão para 'Sobre-us', cada página vai para 'sobre nós'.
Alguém sabe o que pode estar causando isso? Obrigado
ATUALIZAR
Aqui está um hack que funciona, mas é certo feio como o inferno. Ainda prefiro saber por que não funciona de acordo com o esperado.
// Hack because I can not get it to go to anything except 'default' below...
$uri = $_SERVER['REQUEST_URI'];
$uri = str_replace(url::base(), '', $uri);
$page = trim($uri, '/');
if ( ! $page) $page = 'home';
Route::set('default', '(<page>)')
->defaults(array(
'page' => $page,
'controller' => 'page',
'action' => 'index',
));
Solução
Seu código é basicamente uma rota de captura (ele está sendo correspondido para todas as solicitações). Você deve restringir assim.
Route::set('static', '(<page>)', array('page' => 'about-us'))
->defaults(array(
'controller' => 'page',
'action' => 'index',
));
O terceiro parâmetro é uma expressão regular que define o que a rota deve corresponder.
Essa rota irá rotear tudo correspondido na expressão regular para o controlador de página e sua ação de índice.
Você pode então usar $page = $this->request->param('page');
em sua ação.
Outras dicas
Você não está confundindo $ página com $ ação?
Se eu tentar isso, funciona muito bem. Aqui está o método de ação dos meus controladores:
public function action_index($page = NULL)
{
var_dump($page);
}
Se eu navegar para
localhost/site/blup
Eu vejo um bom
string(4) "blup"
sendo eco. Eu tenho a configuração de rota padrão idêntica à sua.
Parece que a detecção automática do URL por Kohana não está funcionando para a configuração do seu servidor ... em que servidor da web está falhando?
Você pode alterar o pedido :: instance ()-> Execute () ... linha no bootstrap para começar com:
Request :: instance ($ _ server ['request_uri'])-> Execute () ...
Isso garantirá que use o URI correto.
Dito isto ... como o desenvolvedor de pixels diz, sua rota parece ... estranho .. para mim;)
Mas - como funciona no MAMP - a rota provavelmente não é o problema.