Ir para conteúdo

POWERED BY:

Arquivado

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

paladino_php

1 coisa desarruma a outra

Recommended Posts

Desculpe postar aqui mas não achei um fórum específico para regras de reescrita.

 

Tenho a seguinte regrinha

 

 

RewriteRule ^(.*)/(.*)/?$ anuncio.php?categoria=$1&anuncio=$2 [NC,L]
 
Código completo do HTACCESS
 
<IfModule mod_rewrite.c> 
    
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L]
php_flag display_errors off
 
RewriteRule ^(.*)/(.*)/?$ anuncio.php?categoria=$1&anuncio=$2 [NC,L]
 
</IfModule>

 

O primeiro e a categoria como já diz e o segundo anúncio. Porém essa regra desformata a página anúncios como se ela não tivesse mais acesso aos arquivos .js e .css

 

O módulo está sendo carregado no httpd.conf conforme a linha abaixo

 

 

LoadModule rewrite_module modules/mod_rewrite.so

 

Alguém saberia dizer que raios é isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

htaccess é um recurso do moódulo do apache module_rewrite

 

aqui no forum, é na seção de webservers...

 

o problema na regra postada, creio que esteja aqui

RewriteCond %{REQUEST_FILENAME}\.php -f

retire o \.php

RewriteCond %{REQUEST_FILENAME} -f

 

 

Explanação

 

 

Para que entenda melhor

RewriteCond %{REQUEST_FILENAME} -d

Isso faz com que a regra não seja aplicada quando encontrar um diretório físico.

 

 

RewriteCond %{REQUEST_FILENAME} -f

Isso faz com que a regra não seja aplicada quando encontrar um arquivo físico.

 

 

O modo com está na sua regra:

RewriteCond %{REQUEST_FILENAME}\.php -f

Isso faz com que a regra não seja aplicada quando encontrar um arquivo físico cuja nomenclatura termine em .php.

Portanto, se encontrar um arquivo físico real com outro nome que não termine em PHP, será tratado como parâmetro.. por isso, os arquivos .css e .js podem não estar carregando..

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi Hinon, nunca tive esse problema antes. Se fizer conforme você falou entra em conflito com a outra regra que remove o .php da páginas, entendeu, ai tenho que colocar novamente para poder acessar qualquer página. Nenhuma página minha termina com .php porque tem a regra que a remove, a não ser que a URL seja lida e interpretada no seu real valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo... sugiro que escolha entre um ou outro.

 

é um sistema legado no qual não tem outra opção ?

 

por exemplo, é mais simples controlar os parâmetros no próprio PHP..

 

Exemplo,

RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.+) /

essa simples regra é o suficiente..

 

todo tipo de parâmetro é enviado para o arquivo definido como index de diretório, normalmente o index.php

 

quer saber como proceder dessa forma mais dinâmica ou quer continuar da forma como está ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, poste a forma dinâmica. Mesmo que não seja utilizada agora servirá de aprendizado para projetos futuros ou pra outra pessoas que queira aprender como funciona :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem diversos tópicos sobre isso, mas infelizmente a maioria não tem um título adequado então isso dificulta a busca..

 

este tópico mesmo é um exemplo de como não se deve entitular um assunto..

 

 

sobre a questão, no PHP, resgate o valor da global

 

$_SERVER['REQUEST_URI']

 

Então, utilize simples funções de manipulação de strings..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Up. Problema persiste.

 

 

Isso faz com que a regra não seja aplicada quando encontrar um arquivo físico.

 

 

O modo com está na sua regra:

 

Mas porque nas nas outras páginas não acontece o mesmo ? É somente nas páginas dinâmicas criadas randomicamente à partir do id do anúncio que existe esse erro. Sim não estou pulando carnaval porque tenho mais o que fazer (Y)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara o himon lhe passou o queijo e faca

 

RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (.+)$ index.php?url=$1 [QSA,L]

Para manipular é bem simples

 

exemplo url: http://forum.imasters.com.br/topic/516586-1-coisa-desarruma-a-outra/

 

$url = isset( $_GET["url"] ) ? strip_tags( $_GET["url"] ) : null;
$url = rtrim( $url, '/');
$url =  explode( '/',  $url);

imprimindo

 

echo $url[0]; //topic
echo $url[1]; //516586-1-coisa-desarruma-a-outra

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show. Vamos lá, vou postar o código como está agora e o que está com problemas.

 

O arquivo .htaccess

RewriteEngine on 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+)$ index.php?url=$1 [QSA,L]
php_flag display_errors off
 

A função query string

<?php
 $atual = ( isset( $_GET[ 'pag' ] ) ) ? $_GET[ 'pag' ] : 'home';
 $pasta = 'paginas';
 
 if( substr_count( $atual, '/' ) > 0 ) 
{
$atual  = explode( '/', $atual );
$pagina = ( file_exists( "{$pasta}/" . $atual[0] . '.php' ) ) ? $atual[0] : 'erro';
 
$id    = $atual[1];
$busca = $atual[2];
} 
 else 
{
$pagina = ( file_exists( "{$pasta}/" . $atual . '.php' ) ) ? $atual : 'erro';
$id     = 0;
$frame  = 0;
}

A página index.php na raiz do servidor

<?php
 // Configurações gerais do sistema
 include_once 'config/config.php';
 
 // Função para query string
 include_once DIR . FUNCOES . 'funcao_query_string.php';
 
 // Inclui o topo do site
 include_once DIR . INCLUDES . 'topo.php';
 
 // Inclui as páginas
 include_once $pasta . '/' . $pagina . '.php'; 
 
 // Inclui o rodapé
 include_once DIR . INCLUDES . 'rodape.php';  

 

Todas as páginas externas estão na pasta paginas. A home.php é incluída normalmente, também está na pasta paginas.

 

O problema: Preciso remover a extensão .php, somente a home é incluída, clicar em qualquer outro link, por exemplo, categorias, não localiza a página e gera o erro 404.

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.