Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;
>
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...
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.
>
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 FoundThe requested URL /sistema/teste/teste2 was not found on this server.
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/
>
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...
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.
>
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?
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?
:::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?
RewriteBase /sistema
:seta:
RewriteBase /
>
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?
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.
>
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:
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?
como você esta passando sua URL?
a URL completa