Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, tudo bem?
Preciso reescrever as urls do meu site.
Utilizo o cakephp e o padrão da url é o seguinte:
http://www.meudominio.com.br/site/produtos/view/14
e desejo alterar para
http://www.meudominio.com.br/nome_do_produto
e também, em todo o site, retirar a pasta /site da url, mas que continue dentro da mesma.
Podem me ajudar? Abraços!
Faça uma pesquisa por .htaccess no fórum e/ou no google.
Fiz isso, estudei o mod_rewrite, mas não consigo chegar onde necessito. Alguém com boa alma e coração pode me ajudar (instruir) ? =D
só configurar a nova rota
http://book.cakephp.org/2.0/en/development/routing.html
app/config/routes.php
Williams, consegui construir o link com o Routes, porém ele não abre o link especificado. Pode me dizer o por quê?
routes.php
Router::connect(
'/NaMidia/:slug',
array('controller' => 'NaMidia', 'action' => 'view')
);
no view:
$url = $this->Html->url(
array (
'controller' => "NaMidia" ,
"action" => 'view',
'slug' => $slug
)
);
Ele gera a url correta:
http://www.dominio.com.br/site/app/NaMidia/nome-da-noticia
Mas ao clicar, gera o erro:
Fatal Error
Error: Call to a
File: /home/nome-do-site/public_html/site/app/Controller/AppController.php
Line: 92
E nesta linha 92 do AppController não há nada a ver com o routes, é uma função de data.
Oque houve?
Era para diminuir a url, fez foi aumentar! :unsure:
>
http://www.meudominio.com.br/nome_do_produto
Para isso é só criar um controller Default e action index
Router::connect(
'/Default/:slug',
array('controller' => 'Default', 'action' => 'index')
);
ou
Router::connect(
array('controller' => 'Default', 'action' => 'index')
);
Fatal Error
Error: Call to a
File: /home/nome-do-site/public_html/site/app/Controller/AppController.php
Line: 92
O que sua app esta fazendo na pasta public, a nível de usuário? isso é uma falha grave de segurança.
Coloque as libs do cake antes da public_html e "os arquivos" da webroot na public_html
e na index chame o cake
//public_html/index.php
if (!defined('ROOT')) {
define('ROOT', dirname(dirname(__DIR__)) . DS .'cakephp');
}Fiz o que me disse, mas não deu certo. Mesmo erro. Veja as 3 conexões do routes.php
Router::connect('/', array('controller' => 'Home', 'action' => 'index'));
Router::connect(
'/Default/:slug',
array('controller' => 'Default', 'action' => 'index')
);
Router::connect(
'/NaMidia/:slug',
array('controller' => 'NaMidia', 'action' => 'view'),
array(
'pass' => array('id', 'slug'),
'id' => '[0-9]+'
)
);
Ps.: Obrigado pela dica da pasta public_html.
Qual a versão do cake, se for a 3.0.x agora tem que chamar appController via namespace
se for as 2.x.x
App::uses('AppController', 'Controller');
<?php
App::uses('AppController', 'Controller');
class DefaultController extends AppController {
....
E teste primeiro só com uma rota
Router::parseExtensions();
Router::connect(
'/', array('controller' => 'default', 'action' => 'index')
);
Williams, só pra tirar a dúvida, este código:
Router::parseExtensions();
Router::connect(
'/', array('controller' => 'default', 'action' => 'index')
);
É dentro do routes.php, certo?
Caso positivo, não deu certo, mesmo erro. :upset:
Parece que ele não associa a rota da url.
// arquivo Config/routes.php
//Router::connect('/', array('controller' => 'Home', 'action' => 'index'));
Router::parseExtensions();
Router::connect(
'/', array('controller' => 'default', 'action' => 'index')
);
Router::connect(
'/NaMidia/:slug',
array('controller' => 'NaMidia', 'action' => 'view'),
array(
'pass' => array('id', 'slug'),
'id' => '[0-9]+'
)
);
// DefaultController.php -->
App::uses('AppController', 'Controller');
class DefaultController extends AppController{
}
//parte do View/NaMidia/index.ctp
$slug = Inflector::slug($noticia['Noticia']['titulo'], $replacement='-');
$url = $this->Html->url(
array (
'controller' => "NaMidia" ,
"action" => 'view',
'slug' => $slug
)
);
?>Você não disse qual a versão?
A 3.0.x e nova e totalmente diferente da 2.x.x
2.x.x
Você não disse qual a versão?
A 3.0.x e nova e totalmente diferente da 2.x.x
Não sei como te ajudar com este erro.
Habilite os erros no cake para o nível máximo = 2, veja se mostra algum erro critico.
app/Config/core.php
Configure::write('debug', 2);
Se não conseguir resolver, troque o núcleo por uma versão anterior, caso seja a released 2.6.4
Caso ainda persister o erro, entre na comunidade no facebook
Lá tem uma galera bem maior :thumbsup:
Faça uma pesquisa por .htaccess no fórum e/ou no google.