Ir para conteúdo

POWERED BY:

Arquivado

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

Leandromx

Rewrite sem usar base href

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

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.