Tylër 0 Denunciar post Postado Março 25, 2010 Boa tarde, Estou com um problemão com as urls amigáveis, sendo que já tentei várias configurações e não obtive o resultado específico a minha particularidade. Bom, vamos ao problema: Meu site: http://localhost/ possui sempre 2 parâmetros: http://localhost/index?param=noticias&title=Titulo-da-noticia e/ou http://localhost/index?param=destaques&title=Titulo-do-destaque Bom, gostaria que os parâmetros fossem reescritos para: http://localhost/noticias/Titulo-da-noticia e http://localhost/destaques/Titulo-do-destaque * Utilizo switch/case para organizar o site. Como proceder? Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Março 25, 2010 http://forum.imasters.com.br/index.php?/topic/203965-urls-amigaveis/ http://www.google.com.br/search?hl=pt-BR&safe=off&client=firefox-a&hs=l3t&rls=org.mozilla%3Apt-BR%3Aofficial&q=mod_rewrite+php&meta=cr%3DcountryBR&aq=f&aqi=&aql=&oq=&gs_rfai= Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Março 27, 2010 Bom, se este tópico não fosse tão antigo(de 2008) eu postaria nele, mas para não revivê-lo vou citar meu problema aqui: Bom, nenhum destes métodos deram certo comigo. Tenho uma página index (sem extensão no .htaccess) onde possui switch/case: <?php switch($param) { case "slideshow": // mesmo que news.php include("news.php"); break; case "news": // news.php include("news.php"); break; case "history": include("history.php"); break; case "contact": include("contact.php"); break; default: include("home.php"); } ?> No trecho: case "slideshow": // mesmo que news.php, só que utilizará o if(isset($_GET['slideshow'])) ... include("news.php"); break; case "news": // news.php include("news.php"); break;Não dá pra utilizar isso de incluir os arquivos de acordo com o parâmetro, pois tenho vários tratamentos na mesma página, de acordo com o switch/case Um teste que realizei foi: Deixar de acessar: http://localhost/index?param=slideshow&title=Reuniao-dos-grupos-teatrais e passar a testar com a URL: http://localhost/slideshow/Reuniao-da-Agrutevaje-e-grupos-teatrais Configurei no .htaccess assim: # URLs amigaveis #RewriteEngine On #RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} !-d #RewriteRule ^(!.(\.gif|\.jpg|\.png|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [L] #RewriteRule ^([^-]+)/$ /index.php?param=$1&title=$2 Mas ao acessar a url amigável, todo o conteúdo que está em frames recebe o mesmo conteúdo da index.php e o conteúdo que deveria ser pêgo do switch/case fica em branco... Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Março 31, 2010 .htaccess RewriteEngine On RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule (noticias|destaques)\/([^\/]+) index.php?param=$1&title=$2 [QSA] index.php <?php if ( isset( $_GET[ 'param' ] ) && isset( $_GET[ 'title' ] ) ){ $param = filter_var( $_GET[ 'param' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); $title = filter_var( $_GET[ 'title' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); switch ( $param ){ case 'destaques': echo 'Destaques foi chamado'; break; case 'noticias': default: echo 'Noticias foi chamado'; } } else { header( sprintf( '%s 400 Bad Request' , $_SERVER[ 'SERVER_PROTOCOL' ] ) ); } Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Março 31, 2010 .htaccess RewriteEngine On RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule (noticias|destaques)\/([^\/]+) index.php?param=$1&title=$2 [QSA] index.php <?php if ( isset( $_GET[ 'param' ] ) && isset( $_GET[ 'title' ] ) ){ $param = filter_var( $_GET[ 'param' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); $title = filter_var( $_GET[ 'title' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); switch ( $param ){ case 'destaques': echo 'Destaques foi chamado'; break; case 'noticias': default: echo 'Noticias foi chamado'; } } else { header( sprintf( '%s 400 Bad Request' , $_SERVER[ 'SERVER_PROTOCOL' ] ) ); } Perfeito! Não sabia que teria que indicar os parâmetros "noticias" e "destaques" no .htaccess, obrigado! :D Mas agora que vem o verdadeiro problema que não sei resolver realmente... http://localhost/new...upos-Fundadores (esta foi a url que consegui fazer funcionar, graças a você, mas... Na index.php o centro fica vazio, sendo que no switch/case está para mostrar a pagina home.php como default.... oO A url: http://localhost/?param=news ficou assim: A url http://localhost/?pa...title=Grupos... ficou assim Mas o pior de tudo ainda há por vir, que em todas as configurações do .htaccess ficava assim, eu não entendo, já que não tem nada pra ser incluído neste lugar,,.... afz Os mesmos menus da esquerda da página aparecem na parte inferior direita oO Qual o motivo disto acontecer? Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Março 31, 2010 os caminhos do java script e de imagem estao absoluto tipo endereço certinho com a url e tudo se você colocar online isso eu posso ter ajudar na boa Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Março 31, 2010 Sim, estão todos com "/templates/" ... O que não entendo é pq através da url: "http://localhost/" o centro da pagina fica em branco, sendo que se não tivesse nenhum parametro era para mostrar a home.php Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Abril 2, 2010 @kakaroto você queria ver mais detalhes, bom agora tenho aqui muitos detalhes A url: tananettabeleza.com.br é o site Este é o arquivo .htaccess sugerido neste tópico pelo João Batista Neto: RewriteEngine On RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule (inicio|artigo)\/([^\/]+) index.php?param=$1&artigo=$2 [QSA] Este é o arquivo articles_center.php if ( isset( $_GET[ 'param' ] ) || isset( $_GET[ 'artigo' ] ) ) { switch($param) { case 'contato': include("contact.php"); break; case 'cadastro': include("register.php"); break; case 'anunciantes': include("advertisers.php"); break; case 'dicas': include("info.php"); break; case 'ranking': include("ranking.php"); break; case 'anuncie': include("advertise.php"); break; default: include("home.php"); } } else { header( sprintf('%s 400 Bad Request' , $_SERVER['SERVER_PROTOCOL']) ); } } else { include("home.php"); } Este é o arquivo list_param.php incluído no diretorio configuracoes <?php // lista de parametros para url amigaveis $param = filter_var( $_GET[ 'param' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); $article = filter_var( $_GET[ 'artigo' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); $type = filter_var( $_GET[ 'type' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); ?> E lá no site tem a seguinte url para um artigo: http://tananettabeleza.com.br/index?param=inicio&artigo=1501742950505608418610532969955841184371808956274781355960042520576 Gostaria de deixá-la assim: http://tananettabeleza.com.br/inicio/1501742950505608418610532969955841184371808956274781355960042520576 Mas o site até aparece só que depois ele fica redirecionando sem fim ~~ E quando isso não acontece, ocorre o mesmo problema do anterior que era a inclusão automática dos menus da esquerda do site, afz Este problema eu não entendo... Bom, é este o problema. Penso eu que se resolver este, resolvo o anterior, já que são parecidos... Att. Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 2, 2010 cara eu vou montar um code para tu e tu segue essa logica minha porque senao eu piro aqui Este é o arquivo articles_center.php esse arquivo vai ter ferrar no futuro imagine você com um site de 5o paginas ai eu você pirar legal desculpe a demora e que eu nao recebi o aviso aqui :) minha curiosidade esse numero e um id de titulo 1501742950505608418610532969955841184371808956274781355960042520576 // nao vai me disse que um id de um titulo :) um abraço e boa pascoa Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Abril 2, 2010 cara eu vou montar um code para tu e tu segue essa logica minha porque senao eu piro aqui Este é o arquivo articles_center.php esse arquivo vai ter ferrar no futuro imagine você com um site de 5o paginas ai eu você pirar legal desculpe a demora e que eu nao recebi o aviso aqui :) minha curiosidade esse numero e um id de titulo 1501742950505608418610532969955841184371808956274781355960042520576 // nao vai me disse que um id de um titulo :) um abraço e boa pascoa É sim, é a id sim, mas claro que vou mudar, isso foi só no começo. Se eu conseguir fazer as urls amigáveis funcionarem no servidor, então a ir será o título separado por "-" abs Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 2, 2010 ola meu velho eu montei um code manero para você :) essa aqui e minha index.php <? $url="http://localhost/amigavel"; ?> <HTML> <HEAD> <TITLE><?=$_GET["title"]?></TITLE> </HEAD> <BODY> <img src="'<?=$url?>'/imagem/sua.imagem.jpg"/> <? require_once 'articles_center.php'; ?> </BODY> </HTML> articles_center.php <? if ($_GET['param'] || $_GET['title']) // se a variavel get param existe e a get title tambem { extract($_GET); // //$param=$_GET['param']; //article=$_GET["title"]; // pegar os get e criar uma variavel:) $param=mysql_escape_string($param); $title=mysql_escape_string($title); // mysql_escape_string como você esta usando get e vai conectar ao banco if(file_exists('include/'.$param.'.php')){ /// se o arquivo do meu get existe eu chamo ele //no seu você nao fazia uma checagem interna // vou nem entrar em detalhe o cara podia explodir seu site internamnte com aquele switch que você usou :) require_once('include/'.$param.'.php'); } else { require_once('include/404.php'); } } else { require_once('include/home.php'); } ?> meu htacess #Habilita o modulo Rewrite RewriteEngine On #Indica qual é a pasta base de todo o conteudo #RewriteBase /amigavel/ #Verifica se a url digitada é um arquivo caso seja para aqui RewriteCond %{REQUEST_FILENAME} !-f #Verifica se a url digitada é uma pasta caso seja para aqui RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^index\/([a-z0-9_-]+)\/?([a-z0-9_-]+)\/?$ index.php?param=$1&title=$2 RewriteRule ^index\/?$ index.php e nao esqueça de criar uma pasta include que e aonde faz esta a inclusao dos arquivos :) Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Abril 2, 2010 ola meu velho eu montei um code manero para você :) essa aqui e minha index.php <? $url="http-~~-//localhost/amigavel"; ?> <HTML> <HEAD> <TITLE><?=$_GET["title"]?></TITLE> </HEAD> <BODY> <img src="'<?=$url?>'/imagem/sua.imagem.jpg"/> <? require_once 'articles_center.php'; ?> </BODY> </HTML> articles_center.php <? if ($_GET['param'] || $_GET['title']) // se a variavel get param existe e a get title tambem { extract($_GET); // //$param=$_GET['param']; //article=$_GET["title"]; // pegar os get e criar uma variavel:) $param=mysql_escape_string($param); $title=mysql_escape_string($title); // mysql_escape_string como você esta usando get e vai conectar ao banco if(file_exists('include/'.$param.'.php')){ /// se o arquivo do meu get existe eu chamo ele //no seu você nao fazia uma checagem interna // vou nem entrar em detalhe o cara podia explodir seu site internamnte com aquele switch que você usou :) require_once('include/'.$param.'.php'); } else { require_once('include/404.php'); } } else { require_once('include/home.php'); } ?> meu htacess #Habilita o modulo Rewrite RewriteEngine On #Indica qual é a pasta base de todo o conteudo #RewriteBase /amigavel/ #Verifica se a url digitada é um arquivo caso seja para aqui RewriteCond %{REQUEST_FILENAME} !-f #Verifica se a url digitada é uma pasta caso seja para aqui RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^index\/([a-z0-9_-]+)\/?([a-z0-9_-]+)\/?$ index.php?param=$1&title=$2 RewriteRule ^index\/?$ index.php e nao esqueça de criar uma pasta include que e aonde faz esta a inclusao dos arquivos :) Só tá caindo na página não encontrada, não entendo, sendo que só digitei o parãmetro ?param=home, e eu tenho a pagina home.php no mesmo diretorio que a 404.php Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 2, 2010 dentro da pasta include e claro :) outra coisa olha os comentario no meu codigo if ($_GET['param'] || $_GET['title']) // se a variavel get param existe e a get title tambem { extract($_GET); // //$param=$_GET['param']; //article=$_GET["title"]; // pegar os get e criar uma variavel:) $param=mysql_escape_string($param); $title=mysql_escape_string($title); // mysql_escape_string como você esta usando get e vai conectar ao banco if(file_exists('include/'.$param.'.php')){ /// se o arquivo do meu get existe eu chamo ele //no seu você nao fazia uma checagem interna // vou nem entrar em detale o cara podia explodir seu site internamnte :) require_once('include/'.$param.'.php'); } eu so entro aqui se você passar um titulo e o param sacou :) Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 2, 2010 crie dentro da index um link assim <a href="/amigavel/index/servico/titulo">pagina servico</a> nao esqueça eu montei esse script dentro de uma pasta maior chamada amigavel :) Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Abril 2, 2010 crie dentro da index um link assim <a href="/amigavel/index/servico/titulo">pagina servico</a> nao esqueça eu montei esse script dentro de uma pasta maior chamada amigavel :) Sim, eu me lembro, só que como você viu lá no site, não tem pasta nenhuma, é direto no classpath, por isso que o exemplo do joao batista se encaixaria melhor. Bom, em meu projeto, tenho a index.php, a articles_center.php, onde mostrará a condição com switch/case a home.php que é para lista de artigos (é a primeira pagina do site) e dentro da home tem a condição: se um artigo foi selecionado, então mostra este artigo (é muito simples!) Mas tem um problema, utilizando as configurações: htaccess: RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php?param=$1&article=$2 A url: http://localhost/home&article=15017429505056084Mostrará a lista de artigos normalmente A url: http://localhost/home&article=15017429505056084 Mostra o artigo normalmente, mas se eu tentar assim: http://localhost/inicio/15017429505056084Mostra o artigo e depois fica redirecionando, sem contar que na parte inferior direita da página, há uma inclusão do menu da esquerda novamente, credo!... oO Agora as páginas: index.php <?php require_once("articles_center.php"); ?> articles_center.php if ( $_GET['param'] || $_GET['article'] ) { $param = explode('/', $_GET['param']); switch($param[0]) { case 'contato': include("contact.php"); break; case 'cadastro': include("register.php"); break; case 'anunciantes': include("advertisers.php"); break; case 'dicas': include("info.php"); break; case 'ranking': include("ranking.php"); break; case 'anuncie': include("advertise.php"); break; default: include("home.php"); } } else { require_once("home.php"); } Não ia adiantar realizar os teste com if/else que você bolou, pois os parâmetros são em português e as páginas em inglês e/ou possuem alguns números seguidos dos nomes delas, por segurança home.php <?php if(isset($_GET['article'])) // se o parametro "artigo" existe... { // visualizando artigo individual $sql = mysql_query("SELECT * FROM articles WHERE id='$param[1]'"); if($sql) { if(mysql_num_rows($sql)==0) { echo "<h2>Informações</h2><p align=\"justify\">Este tópico não existe!</p>"; echo "$img_home <a href=\"index\" class=\"azul\">Ir para o início</a>"; } else {... mostra lista de artigos.... (aqui funciona perfeitamente e sem inclusão estranha do menu novamente)... Visualização: http://i60.servimg.com/u/f60/11/80/81/44/image10.jpg (a imagem eh grande) Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 3, 2010 seria a mesma jogada no seu caso o que eu procuro no meu e a index no seu case e a home entao fica assim entao RewriteRule ^home\/([a-z0-9_-]+)\/?([a-z0-9_-]+)\/?$ index.php?param=$1&title=$2 home/ qualquerdado/ qualquer dado/ pagina que direciomar o que passar so isso Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Abril 3, 2010 Mas ao incluir esta linha no .htaccess não acontece nada RewriteRule ^home\/([a-z0-9_-]+)\/?([a-z0-9_-]+)\/?$ index.php?param=$1&title=$2Estou por dentro do que ela faz, mas o ruim é que sempre eu teria que incluir /home na url, e não quero isso, mas sim apenas os parâmetros correspondente que poderão mudar de acordo com a página, exemplo: http://localhost/ página principal http://localhost/inicio/6464654654 para um artigo específico http://localhost/contact para contato http://localhost/validate/register para token para registro etc Então se eu incluísse esta linha aí, teria que ser: http://localhost/home/ página principal http://localhost/hom...icio/6464654654 para um artigo específico http://localhost/home/contact para contato http://localhost/hom...lidate/register para token para registro Não é isso? Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 5, 2010 meu velho me adicionar no gtalk pq eu passei o dia fora pq eu nao fico no msn durante o dia e melhor via gtalk tu me mandar um email eu te ajudo no gtlak por eu acho que isso vai virar um postagem gigante kakaroto1500@gmail.com tu me mandar um email a hora que você esta online ai a gente ver isso junto e resolver esse seu case logo :) Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Abril 25, 2010 Muito obrigado kakaroto!!! :D Rapidinho você resolveu! Bom, problema resolvido, isto é, no servidor, tivemos que trocar de servidor, não utilizamos mais apache, agora é Nginx, e as configurações não são em .htaccess mas sim, pelo nosso sistema lá, afz, é bem mais difícil configurar agora.... Mas em meu windows, só tá pegando o primeiro parâmetro do .htacess, o segundo é retornado de maneira vazia. Segue o código PHP abaixo: <?php // pegando parametros para o sites $page = filter_var( @$_GET[ 'page' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); $id = filter_var( @$_GET[ 'id' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); if( isset($_GET['page']) || isset($_GET['id']) ) { switch($page) { case 'home': $description_site = 'Início e id: '.$id; break; default: $description_site = 'Esta página não existe!'; } } else { $description_site = 'De Medina para o mundo!'; } ?> .htacess RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ([^\/]+) index.php?page=$1&id=$2 [QSA] #RewriteRule ^(.php)$ index.php?page=$1&id=$2 Desta maneira, quase tudo funciona corretamente, exceto que o valor de "id" é sempre vazio, não é capturado... Será que é problema de usar apache no windows? Fiz uma instalação manual, depois mudei pra wampserver, depois pra appserv mas nada resolveu..... As configurações do arquivo .httpd.conf são estas: <Directory /> Options FollowSymLinks Indexes AllowOverride All </Directory> Se eu mudar AllowOverride para AuthConfig, o servidor sai do ar.... Nos logs de erro, informam que as condições de rewrite não podem ser inclusas, então não entendo o que há de errado oO Gostaria de uma ajuda pra fazer o apache lhe dar bem com .htacess..... Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Maio 4, 2010 Agora sim, resolvido! (Antes alguém entitulou como resolvido sem eu dizer nada O.O) Muito obrigado kakaroto! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Com sua ajuda, pude entender melhor as regras rewrite para windows tb... :D Bom, utilizei: # urls amigaveis RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ([a-zA-Z0-9_-]*)\/?([a-zA-Z0-9_-]*)$ /index.php?parametro1=$1¶metro2=$2 E um switch normal como os demais.... Era exatamente isto que eu precisava e bolamos depois de muita luta, pois meu localhost no windows não queria aceitar nenhuma regra com mais de um parâmetro, muito estranho isso, mas finalmente resolvemos... Bom, fica aí a dica pra quem também tiver este problema! Att. Compartilhar este post Link para o post Compartilhar em outros sites