Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoa,
Seguinte eu uso url amigaveis em vários projetos.
Mas sempre tenho que inserir um base href='site.com.br'
Estava vendo por ai que alguns sites não usa essa tag base
O que posso estar fazendo para eu não precisar usar a base href ?
Segue meu .htaccess
RewriteEngine on
DirectoryIndex main.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ main.php?pg=$1&url=$2&id=$3
Sem chance assim não rola cara.
Fica faltando as imagens.
você está sendo 'muito guloso' na sua ER:
(.*) tente não ser tão 'genérico', cuidado com os curingas.
especifique mais, limitando a a-z0-9 e outros sinais, se você não sobrescrever o . (ponto), não terá problemas com imagens, css...
Entendi.
Eu tentei de duas maneiras
E mesmo assim não rolou
RewriteRule ([a-zA-Z0-9_-])\/?([a-zA-Z0-9_-])$ main.php?pg=$1&url=$2&pagina$3
RewriteRule ^([0-9]+)\/([0-9]+)\/([0-9]+)\/([A-Za-z-]+)$ main.php?pg=$1&url=$2&pagina$3
O ideal pra você seria recuperar tudo em uma única query string (ex: main.php?page=aaa/bbb/ccc) e tratar com o próprio PHP. Assim fica mais fácil pra gerenciar a estrutura das páginas. Não precisa desfazer a sua lógica com $_GET['pg'], $_GET['url'] e $_GET['pagina'], basta tratar o $_GET['page'] e dividí-lo adequadamente entre essas últimas usando o PHP.
Costumo usar um .htaccess como este sem problemas:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?page=$1 [QSA,L]
</IfModule>
A flag QSA significa [Q]uery tring [A]ppend e determina o comportamento da inserção da query string, se ela substituirá a query string existente ou se simplesmente será acrescentada. Na prática, entre outros casos, isso pode ser útil se, mesmo usando URL amigável, você ainda quiser trabalhar com query string em determinadas ocasiões (ex, na URL do browser: /busca?q=valor - mod_rewrite para /busca e query string convencional para q=valor, sem interferência do .htaccess).
Nunca precisei adicionar essa tag base href, mas pode ser que essa instrução te ajude:
RewriteCond %{REQUEST_URI} /[^\.]+[^/]$
RewriteRule (.*) $1/ [L]
Adicionar logo depois de RewriteEngine On, ela insere uma / (barra) no final da URL.
A flag L significa [L]ast rule e funciona como o break do PHP.
Mais sobre mod_rewrite: http://httpd.apache.org/docs/current/mod/mod_rewrite.html
Também não rolou.
Seguinte, meu htacess funciona mas sou obrigado a colocar base href como disse no inicio.
Eu quero tirar o base href.
Fiz tudo que me pediram acima funciona mas as imagens e css não mostra no site somente a home que mostra certo.
Seguinte o htaccess que postei no inicio.
Exemplo do meu link
www.site.com.br/sistema/produto/produto-de-teste.html
www.site.com.br - meu dominio
/sistema/ - pasta aonde esta o main.php ou seja o sistema todo
produto - página produto.php
produto-de-teste.html - produto que puxo do bd
[code]
Quando tiro a tag <base href='www.site.com.br/sistema/'>
As imagens não aparece e olhando no codigo fonte ele entende que /produto/ é uma pasta.
Então ele busca a imagem
[code]
www.site.com.br/sistema/produto/images/foto.jpg
e na realidada foto esta em
www.site.com.br/sistema/images/foto.jpg
Aonde estou errando nisso?
Pra você entender, comece uma nova aplicação do zero, com essa estrutura:
/.htaccess
/app/.htaccess
/app/index.php
/app/images/qualquer_imagem.jpg
Em /.htaccess, coloque:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} /[^\.]+[^/]$
RewriteRule (.*) $1/ [L]
RewriteRule (.*) app/$1 [L]
</IfModule>
Em /app/.htaccess, coloque:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?page=$1 [QSA,L]
</IfModule>
Em /app/index.php, coloque:
<?php
if (isset($_GET['page'])) {
echo '$_GET
= ' . $_GET['page'];
}
else {
echo '$_GET
não definido. Página principal.';
}
?>
<img src="/images/qualquer_imagem.jpg" alt="" />
Lembrando que, pra esse teste funcionar, '/' tem que ser o diretório public_html, htdocs ou www, ou seja, os arquivos tem que estar de forma que possam ser acessados por www.site.com.br e não www.site.com.br/pasta. Há, obviamente, como fazê-lo dentro de outra pasta, mas pra simplificar faça dessa forma.
Entendendo isso, é só adaptar ao seu sistema. Se, mesmo funcionando o teste, não funcionar no seu sistema, pense na possibilidade de alterar o sistema.
use uma variavel com o endereço, é so isso
define('base' , 'site.com.br/')
link -> base . 'pagina.php'
utilize
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pg=$1&url=$2&id=$3