wfelix 0 Denunciar post Postado Dezembro 2, 2011 bom, seguinte... tenho o seguinte .htaccess na raiz: Options -MultiViews -Indexes ErrorDocument 404 /index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .+ - [L] RewriteRule ^([^/]+)$ index.php?perfil=$1 [QSA,L] </IfModule> e funciona beleza... tudo que for digitado na url como http://www.meudominio.com/batatinha , caso nao exista tal diretorio é automaticamente interpretado como http://www.meudominio.com/index.php?perfil=batatinha funciona beleza... Faz exatamente o que deveria fazer, POREM eu preciso de um incremento: eu queria dar um jeito de, caso o que o cara digitar na url seja algo do tipo: http://www.meudominio.com/batatinha/cenourinha.html caso nao exista batatinha/cenourinha.html ele seja simplesmente redirecionado( um simples redirect) para a index.php da raiz ou seja, meudominio.com/batatinha mantem a regra que eu ja tenho meudominio.com/batatinha/qualquer_coisa_que_nao_exista seja redirecionado pra index.php ha como fazer isso? abraços ps:caso nao tenha uma maneira de fazer isso, tem como fazer com que o mod_rewrite ignore um diretorio especifico (batatinha, por exemplo) e nao aplique a s regras que eu ja tenho pra esse diretorio? NAo sei se é a área correta pra postar, fiquei na duvida... Caso haja uma area especifica pra isso, algum moderador poderia mover pra mim, por favor? Compartilhar este post Link para o post Compartilhar em outros sites
wfelix 0 Denunciar post Postado Dezembro 5, 2011 Ta dureza... procurando problemas similares com solução, nada ainda... Deve ser tão elementar pra quem sabe que nem tem muita "literatura" a respeito. Se alguem souber, por favor, de uma ajudinha. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Dezembro 5, 2011 Options -MultiViews -Indexes ErrorDocument 404 /index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .+ - [L] RewriteRule ^([^/]+)$ index.php?perfil=$1 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f #se não for um arquivo RewriteCond %{REQUEST_FILENAME} !-d #se tb não for um diretório RewriteRule ^(.*)$ /index.php?dados=$1 [R=301,L] #redireciona para index.php, enviando os dados por QueryString </IfModule> Tá comentado o funcionamento. Não testei, mas acho que é isso. []s Compartilhar este post Link para o post Compartilhar em outros sites
wfelix 0 Denunciar post Postado Dezembro 5, 2011 Valeu Matheus, mas se você reparar, isso faz o mesmo que o meu já esta fazendo, só que com uma regra a mais de variavel. E nem chega na parte nova, porque a regra "RewriteRule ^([^/]+)$ index.php?perfil=$1 [QSA,L]" com esse L ja interrompe ali o processamento do arquivo :( Não sei se redigi direito meu primeiro post, mas não é isso... ainda to procurando, deve existir em algum lugar alguem que tenha feito isso, porque me parece muito elementar. vou dar um exemplo mais simples quando o cara acessar: http://www.meusite.net/pasta_especifica/arquivo_que_nao_existe.php ele seja redirecionado(inclusive mudando a url e tudo, redirecionamento simples) para http://www.meusite.net/index.php Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Dezembro 5, 2011 E nem chega na parte nova, porque a regra "RewriteRule ^([^/]+)$ index.php?perfil=$1 [QSA,L]" com esse L ja interrompe ali o processamento do arquivo Essa não é a função da Flag L. Além disso, a condição que eu criei é inversa à sua. Na sua a condição é: Se o filename FOR um arquivo existente OU um diretório existente. Na minha é: Se o filename NÃO FOR um arquivo existente, tampouco um diretório existente. Você chegou a testar? Compartilhar este post Link para o post Compartilhar em outros sites
wfelix 0 Denunciar post Postado Dezembro 5, 2011 sim... esta fazendo basicamente a mesma coisa, com a excessao da flag r=301 bom, eu acho que nao me expliquei bem... o lance meu pronto ja esta fazendo o que eu quero pra coisas simples http://www.meusite.net/pasta_que_nao_existe faz http://www.meusite.net/index.php?perfil=pasta_que_nao_existe maravilha... o meu problema é quando tem algo mais [code]http://www.meusite.net/pasta_que_nao_existe_ou_existe/arquivo_que_nao_existe.php nesse caso eu queria um redirecionamento simples pra index.php, inclusive mudando a url, por conta dos paths relativos de css, imagens, etc... e, se nao der pra fazer isso de modo coringa, que dese pra eu escolher as pastas em que isso acontecesse, ex: http://www.meusite.net/pasta_especifica1/arquivo_que_nao_existe.php http://www.meusite.net/outra_pasta_especifica/arquivo_que_nao_existe.php Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Dezembro 5, 2011 Vou rodar uns testes aqui então, e posto um resultado mais tarde. :natalsmile: EDIT: Entendi que o problema é quanto aos seus CSS, JS, etc... beleza. Me diga se os exemplos estão corretos: http://curso.haxor.com.br/ -> acessa a index normalmente http://curso.haxor.com.br/pasta_inexistente/ -> a pasta não existe, portanto o index.php interpreta como parametro do GET perfil http://curso.haxor.com.br/pasta_existente/ -> a pasta existe, mas não precisamos mostrar seu conteúdo ao usuário, portanto vai pro GET perfil tb.. ( posso mudar isso se preferir - permitir a exibição de pastas existentes ) http://curso.haxor.com.br/arquivo_existente.php -> o arquivo existe, portanto o exibimos normalmente http://curso.haxor.com.br/pasta_existente/arquivo_existente.css -> mesmo caso de cima Código index.php: <?php echo '<pre>'; print_r( $_GET ); Código .htaccess: Options -MultiViews -Indexes ErrorDocument 404 /index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.php?perfil=$1 [QSA,L] </IfModule> :bye: Compartilhar este post Link para o post Compartilhar em outros sites
wfelix 0 Denunciar post Postado Dezembro 5, 2011 valeu Matheus... Bom, funciona de maneira muito parecida com a qual o meu ja funciona... Ainda não rola a coisa elementar a que eu me referia, por exemplo: http://curso.haxor.com.br/pasta_inexistente/arquivo_inexistente.php em vez de redirecionar "duro" pra index, ele joga tudo isso: "pasta_inexistente/arquivo_inexistente.php" no GET['perfil']; Esta ok, de qualquer forma, a sua maneira acaba sendo mais facil de trabalhar do que a minha esta, alterando o script da minha aplicação(o php)... Eu queria um jeito menos "invasivo" só mexendo no .htaccess, mas acho que nao rola mesmo... De qualquer forma, valeu, vou trabalhar com base no seu exemplo. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Dezembro 5, 2011 Hummmm... testa assim então: Options -MultiViews -Indexes ErrorDocument 404 /index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*$ /index.php [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?perfil=$1 [QSA,L] </IfModule> Se não for arquivo, manda pra index.php, 'duro'. Se não for diretório, manda pra index.php, com parâmetros. EDIT: isso vai resultar em erro 500, por loop infinito... estou trabalhando em cima disso. :bye: Compartilhar este post Link para o post Compartilhar em outros sites
wfelix 0 Denunciar post Postado Dezembro 5, 2011 Ah, vou te mostrar a aplicação, pra você ter uma ideia melhor do problema... o meu .htaccess atual é: Options -MultiViews -Indexes ErrorDocument 404 /index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .+ - [L] RewriteRule ^([^/]+)$ index.php?soparceiro=$1 [QSA,L] </IfModule> o site: http://www.centraldeofertas.net/index.php maravilha... mostrando ofertas de um unico parceiro: http://www.centraldeofertas.net/grupoprive mesma coisa, ainda recuperando o GET: http://www.centraldeofertas.net/grupoprive?conteudo=oferta.php&id=447 uma pasta que nao existe como pasta, nem como parceiro, tambem funcionando a contento: http://www.centraldeofertas.net/ofertassdar43 uma pasta que existe: http://www.centraldeofertas.net/ofertas/ meu problema, dois casos: 1) http://www.centraldeofertas.net/ofertas/pagina_que_nao_existe.php 2) http://www.centraldeofertas.net/ofertassdar43/pagina_que_nao_existe.php nesses 2 casos, por algum motivo que não sei, ele reescreve sim a pagina como se fosse a index.php, mas o path "interno" dele continua sendo "ofertas" ou "ofertassdar43", "zuando" o path(especialmente o que monta as imagens dinamicas das ofertas, e é só por isso o meu problema)... nesses casos de arquivo que nao existe em diretorios acima da raiz, eu gostaria de um redirect "duro" pra index... inclusive mudando a url pra http://www.centraldeofertas.net/index.php Saca? assim eu nao precisaria alterar nada nos arquivos do site propriamente dito. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Dezembro 5, 2011 Feitoria.. E de quebra, você ganhou um anti-XSS e anti-SQL Injection via URL. :natallaugh: Options -MultiViews -Indexes ErrorDocument 404 /index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} ^.*\.([a-zA-Z]{3})$ RewriteRule ^.*$ /index.php [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} ^([a-zA-Z/_-]*)$ RewriteRule ^(.*)$ /index.php?perfil=$1 [QSA,L] </IfModule> Se digitar qualquer arquivo COM EXTENSÃO, que NÃO exista, tipo lalala.php ou lalala.css, ele manda direto pra index, sem choro nem vela. Acessar um arquivo existente, é permitido. Acessar uma pasta, existente ou não, manda pra index com a query string. Acho que agora tá 100%. Faça os testes na URL que te passei lá em cima.. vou deixar por umas horas on ainda. :natalhappy: EDIT: O único porém é o fato de não mais aceitar ponto nos perfis, mas acho que isso já é assim no seu script php, né? Exemplo: http://curso.haxor.com.br/fdsfsd.fsdfssd Não aplica nenhuma regra nesse caso. Compartilhar este post Link para o post Compartilhar em outros sites
wfelix 0 Denunciar post Postado Dezembro 5, 2011 Rapaz... OBRIGADÃO! Realmente sou bem fraco no que diz respeito a expressão regular. Resolveu meu problema. So tem uma ressalva boba, mas eu acho que "nunca" vai acontecer no meu caso, subpastas que existiam e nao existiam mais, em varios nivels, ex: http://www.centraldeofertas.net/ofertas/parceiros/qualquer_pasta_inexistente nesse caso, ainda ocorre o mesmo problema, MAS, acho muito dificil eu precisar arrumar esse caso(mas se for facil fazer isso alterando a expressão regular, tem como?) Muito grato, me resolveu um problemão! Edit: ta resolvido... esquece o lance dos multiplos niveis d eurl, nunca vai haver um link pra pasta sem ter um arquivo, dessa forma nunca chegara a ser um problema... FICOU PERFEITO do jeito que está... agradeço demais mais uma vez, esse problema me consumiu muitas horas nesses ultimos 4 dias. Moderador, pode por a tag [Resolvido] :D. Compartilhar este post Link para o post Compartilhar em outros sites