Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

michelmfreitas

Reescrever URL

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça uma pesquisa por .htaccess no fórum e/ou no google.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oque houve?

Era para diminuir a url, fez foi aumentar! :unsure:

 

 

 

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');
}

configure o dirname ate encontrar a pasta do cake

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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')
);

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 
	)
);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não disse qual a versão?

A 3.0.x e nova e totalmente diferente da 2.x.x

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

 

https://www.facebook.com/groups/cakebrasil/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.