Ir para conteúdo

POWERED BY:

Arquivado

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

Sepphiroth

Problema com URL Amigáveis

Recommended Posts

Olá meus queridos.

 

Venho trazer mais um problema, que quebrei a cabeça por dias já...

 

Já pesquisei no Fórum e no Google, senão não postaria aqui :)

 

Estou usando o WAMP5 com Apache e Mysql 5, rodando perfeitamente. Fiz a configuração conforme várias pesquisas encontradas, para utilizar URL amigáveis.

Descomentei a linha de LoadModule do mod_rewrite, reiniciei o servidor, verifiquei se a opções de rewrite_module no menu do apache estava marcada, executei um:

 

<?php
echo '<pre>';
print_r(apache_get_modules());
echo '</pre>';
?>

 

Verificando que o mod_rewrite estava sendo carregado. Como visto abaixo no resultado do script anterior:

 

Array

(

[0] => core

[1] => mod_win32

[2] => mpm_winnt

[3] => http_core

[4] => mod_so

[5] => mod_actions

[6] => mod_alias

[7] => mod_asis

[8] => mod_auth_basic

[9] => mod_authn_default

[10] => mod_authn_file

[11] => mod_authz_default

[12] => mod_authz_groupfile

[13] => mod_authz_host

[14] => mod_authz_user

[15] => mod_autoindex

[16] => mod_cgi

[17] => mod_dir

[18] => mod_env

[19] => mod_include

[20] => mod_isapi

[21] => mod_log_config

[22] => mod_mime

[23] => mod_negotiation

[24] => mod_rewrite

[25] => mod_setenvif

[26] => mod_php5

)

 

Assim, tive a certeza que o modulo esta habilitado.

Segui, criando meu arquivo .htacess desta maneira:

 

RewriteEngine On
RewriteRule ^(.+)$ /index.php?s=$1

 

Que na minha teoria, deve retornar para a index.php, na variavel $_GET['s'], toda a string após o dominio do site.

Salvei no mesmo diretório que esta meu arquivo index.php.

Editei o arquivo index.php para exibir as variaveis vindas do GET, desta maneira:

 

<?php
echo '<pre>';
print_r($_GET);
echo '</pre>';
?>

 

Mas nada me é retornado, mesmo inserindo informações diretamente na URL...

Para informação, minha estrutura de diretório é a seguinte:

 

localhost

localhost/sistema/

localhost/sistema/index.php

localhost/sistema/.htacess

 

 

Pode ser que seja algo bem simples, mas como não consegui resolver, peço a ajuda de vocês :)

Grato pela atenção;

Compartilhar este post


Link para o post
Compartilhar em outros sites

como você esta passando sua URL?

 

a URL completa

 

Vinicius, como estou testando, estou digitando no navegador:

localhost/sistema/var1/var2

 

Esperando que ele me mostrasse o Array com a variavel "var1/var2", para eu poder dar explode() depois...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você especificou o como é para realizar a reescrita, mas não especificou em qual base.

 

RewriteEngine On
RewriteBase /localhost/sistema/

 

Adicione isso no início do .htacces. Deve resolver seu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você especificou o como é para realizar a reescrita, mas não especificou em qual base.

 

RewriteEngine On
RewriteBase /localhost/sistema/

 

Adicione isso no início do .htacces. Deve resolver seu problema.

 

Oi Gabriel, adicionei a linha citada, ficando:

 

RewriteEngine On
RewriteBase /localhost/sistema/
RewriteRule ^(.+)$ /index.php?s=$1&p=$2

 

Mas ainda é me é retornado o erro 404:

Not Found

The requested URL /sistema/teste/teste2 was not found on this server.

Compartilhar este post


Link para o post
Compartilhar em outros sites

em RewriteBase, coloque apenas:

RewriteBase /

 

 

 

talvez tenha que configurar AllowOverride, no apache.

veja esse tópico

 

http://forum.imasters.com.br/topic/465559-solucao-para-urls-amigaveis-que-nao-funcionam/

 

Hinom, realmente o Alowoverride estava None, com Deny to All...

Fiz a alteração, ficando:

 

<Directory />
   Options FollowSymLinks
   AllowOverride All
</Directory>

 

Alterei tambem o .htacess:

 

RewriteEngine On
RewriteBase /
RewriteRule ^(.+)$ /index.php?s=$1&p=$2

 

Mas nada resolvido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas para confirmar:

 

1. após as alterações, reiniciou o apache ?

 

2. ambiente é windows ou linux?

 

esse vai no Directory padrão do httpd.conf

<Directory "C:/www">
#essas são configurações padrão da instalação do Aache
   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

C:/www -> modifique para o seu diretório.. coloque o path completo

 

 

<IfModule dir_module>
   DirectoryIndex index.php
</IfModule>

 

 

// no httpd.conf, caso esteja usando vhosts

NameVirtualHost *:80

 

 

 

exemplo de um virtualhost (observe que aqui AllowOverride está como All)

<VirtualHost *:80>
  ServerAdmin adm@localhost
  DocumentRoot "C:\www\projeto1\public"
  ServerName projeto1
  #ServerAlias projeto1

  #obviamente, não esquecer de especificar o .htaccess
  AccessFileName .htaccess

<Directory "C:\www\projeto1\public">
       Options Indexes FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
       DirectoryIndex index.php index.html
</Directory>
</VirtualHost>

 

 

 

obs; estou com um pouco de pressa.

desculpe não postar algo mais didático ou mais simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas para confirmar:

 

1. após as alterações, reiniciou o apache ?

 

2. ambiente é windows ou linux?

 

esse vai no Directory padrão do httpd.conf

<Directory "C:/www">
#essas são configurações padrão da instalação do Aache
   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

C:/www -> modifique para o seu diretório.. coloque o path completo

 

 

<IfModule dir_module>
   DirectoryIndex index.php
</IfModule>

 

 

// no httpd.conf, caso esteja usando vhosts

NameVirtualHost *:80

 

 

 

exemplo de um virtualhost (observe que aqui AllowOverride está como All)

<VirtualHost *:80>
  ServerAdmin adm@localhost
  DocumentRoot "C:\www\projeto1\public"
  ServerName projeto1
  #ServerAlias projeto1

  #obviamente, não esquecer de especificar o .htaccess
  AccessFileName .htaccess

<Directory "C:\www\projeto1\public">
       Options Indexes FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
       DirectoryIndex index.php index.html
</Directory>
</VirtualHost>

 

 

 

obs; estou com um pouco de pressa.

desculpe não postar algo mais didático ou mais simples.

 

 

 

Hinom, respondendo...

1. Sim, sempre reinicio o apache, e todos os serviços.

2. O ambiente eh Windows, utilizando WAMP.

 

Fiz/verifiquei as alterações como você postou, reiniciei o apache, mas n obtive sucesso.

Seria um problema eu estar usando um diretório que não seja o root?

 

Pois meus root fisico seria:

X:/wamp/www/sistema/[arquivos index e .htacess]

Cujo caminho no navegador fica:

localhost/sistema/index.php

localhost/sistema/.htacess

 

meu .htacess continua assim:

RewriteEngine On
RewriteRule ^(.+)$ /index.php?s=$1

 

Existe alguma forma de testar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hinom, milhões de desculpas, eu estava efetuando um erro banal, porém ainda não solucionei completamente.

 

Meu arquivo .htaccess estava nomeado como .htacess (faltando o "C"), por isso ele não executava.

 

Fiz a correção, com as regras:

 

RewriteEngine On
RewriteRule ^(.+)$ index.php?s=$1

 

Mas o valor de $_GET['s'] esta vindo como "index.php", mesmo acessando "localhost/sistema/teste/teste2".

Eu estava esperando que retornasse "teste/teste2".

Como devo proceder?

Compartilhar este post


Link para o post
Compartilhar em outros sites

:::ATUALIZANDO A SITUAÇÃO:::

 

meu .htaccess:

RewriteEngine On
RewriteBase /sistema

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?var=$1
RewriteRule ^admin/(.*)$ admin/index.php?var=$1

 

Ao tentar acessar localhost/sistema abre a index.php sem as variaveis logicamente...

Ao tentar acessar localhost/sistema/teste1/teste2/teste3 abre a index.php com as variaveis, tudo bonitinho.

Ao tentar acessar localhost/sistema/admin abre a admin/index.php, creio eu por causa da condição de reescrita.

MAS

Ao tentar acessar localhost/sistema/admin/teste1/teste2/teste3, ao invés de abrir a admin/index.php com as variaveis, ele abre a index do root, com as variaveis, e incluindo 'admin' entre elas...

 

O que esta errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

RewriteBase /sistema

:seta:

RewriteBase /

 

Ao mudar o Base, como trabalho com os sites, dentro de diretorios (cada site em um diretorio dentro do root) ele para de funcionar as urls...

Mas mesmo assim fiz o teste e coloquei tudo na raiz, ele continua funcionando da mesma forma, com admin/teste/teste levando ao root e não ao admin/index.php :huh:

 

Creio que minha regra de admin esteja incorreta, o que acha Hinom?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem dois .htaccess, certo?

 

uma para a raiz

/index

 

outro para o admin

/admin/index

 

 

na pasta raíz, mantenha

RewriteBase /

 

na pasta admin, faça

RewriteBase /admin

 

 

e, como trabalho com os sites, dentro de diretorios (cada site em um diretorio dentro do root)

certo.. há algum motivo para não trabalhar om vhosts ?

 

uma dica é configurar dns local para cada projeto e atribuir os dns locais no virtual hosts do apache.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem dois .htaccess, certo?

 

uma para a raiz

/index

 

outro para o admin

/admin/index

 

 

na pasta raíz, mantenha

RewriteBase /

 

na pasta admin, faça

RewriteBase /admin

 

 

e, como trabalho com os sites, dentro de diretorios (cada site em um diretorio dentro do root)

certo.. há algum motivo para não trabalhar om vhosts ?

 

uma dica é configurar dns local para cada projeto e atribuir os dns locais no virtual hosts do apache.

 

 

Hinom, desculpe a demora para responder, mas estava sem internet.

Realmente as URLs funcionaram quando usei 2 htaccess separados, uma para cada diretorio. Ainda vou fazer alguns testes, e volto aqui para finalizar o tópico.

Mas pensei que daria para fazer as regras dos 2 diretorios, dentro do mesmo htaccess, pois se tratava de um sub-diretorio. Mas isso já é detalhe :)

 

Quanto ao vhost, eu não tinha conhecimento. Dei uma breve pesquisada, e achei bem interessante, principalmente para mim que trabalho com outra pessoa na rede. Vou me aprofundar no assunto.

 

Obrigado por tudo Hinom, volto aqui para dar o "Finish Him". :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, encontrei outro problema, trabalhando com as URL amigáveis.

Minha pagina de login, envia para uma pagina "loga.php" para efetuar as devidas verificações. Porém quando redireciono o usuario com header(Location: pagina.php), o "pagina.php" aparece na URL novamente. Como eu deveria executar este redirecionamento, para não ficar a mostra?

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.