Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 ?
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.
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á ?
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 :)
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..
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)
:seta: URL Rewriting Guide
Valeu cara. Essa documentação será bem útil. (Y)
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-outraShow. 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.
Você não entendeu o meu problema hinnom...
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..