Jump to content


Photo

Apache / Mod Rewrite


  • Faça o login para participar
12 replies to this topic

#1 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 19/06/2007, 10:34

Olá!

Após um tempão ausente, estou de volta!
A dúvida hoje é a seguinte:

Estou utilizando em um pequeno portal, hospedado em host comum (compartilhado), o MOD REWRITE.

Criei então o arquivo .htaccess no diretório raiz e nele fiz o seguinte:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !/index.php
RewriteCond %{REQUEST_FILENAME} !/favicon.ico
RewriteCond %{REQUEST_FILENAME} !/robots.txt
RewriteCond %{REQUEST_FILENAME} !/img
RewriteRule ^/?.*/?$ /index.php [L]

Com isso, quando o visitante digitar qualquer endereço, internamente o Apache vai solicitar a página index.php (desde que não seja /favicon.ico ou /robots.txt bem como o próprio /index.php, senão entra em loop infinito, e a pasta img, onde estão as imagens e toda a pasta está acessível).

No index.php tem um script que pega o que o visitante solicitou e com isso monta a página do jeito que eu quero (pode ser utilizando includes, processando alguma função ou mesmo retornando um header() 404 Not Found quando o que o visitante digitou não existe.

Certo? Até aí tudo bem.

A dúvida mesmo é:

Por estar fazendo com que TODOS os acessos executem o script index.php, pode haver algum tipo de sobre carga ou problema para o servidor? :huh:

Qual seria um limite aceitável de requisições (pageviews) para que essa técnica rode sem problemas?
Isso porque a meta inicial é ter cerca de 500mil pageviews/mes, esperando cerca de 5milhões a médio prazo.

Existe alguma forma de projetar isso e prever quando poderá sofrer algum tipo de sobre carga?

Uma das "soluções" que pensei seria criar 10 ou 20 cópias do index.php (index1, index2, etc) e na hora de redirecionar no .htaccess fazer um sorteio entre essas cópias e assim a sobre carga poderia ser dividida entre os arquivos.... :wacko:

Se tudo isso não for necessário, ou seja, estou me preocupando a toa pois não vai sobrecarregar nada, agradeço se me avisarem.... :lol:

Obrigado e saudações aos antigos membros e novos também!! :rolleyes:
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#2 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 21/06/2007, 04:42

Oii beleza sobre a sua dúvida, com certeza uma hospedagem de sites normal não dará certo pois um simples Mod_rewrite já pesa no servidor.

E se puder me ajudar em uma dúvida, fico grato desde já.

Meu HTACCESS:
RewriteEngine on
RewriteRule !.(gif|jpg|png|css|js|swf|xml|txt)$ index.php
RewriteRule ^(.*)$ index.php?gx=$1

Ele de forma alguma ta dando pra colocar os CSS, imagens e etc, coloquei como link absoluto do http://localhost/estilo.css e também e não inclui.

Pois estou começando a usar o mod_rewrite ainda . ^^ .

Obrigado e abraços. :)

Edição feita por: lwirkk, 21/06/2007, 05:38.

Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#3 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 21/06/2007, 11:46

Olá lwirkk (??) !

Tive uma série de problemas assim quando comecei a utilizar... como a engine utiliza expressões regulares, sempre tem algum errinho bobo que passa despercebido, por isso tentei simplificar como viu acima.

Também existe uma série de comandos específicos para o Mod Rewrite, tem um site aqui com umas tabelas com todos os comandos, muito útil!!

http://www.ilovejack...te-cheat-sheet/

Outra coisa importante, no HTML defina corretamente a tag <base> pois não sei como está teu site, mas as vezes da pane essa mudança de endereços... a tag <base> já "trava" os caminhos....

Agora preciso saber até onde compromete o uso do Mod Rewrite, não pelo uso dele em si, mas pelo problema de requisitar sempre o script index.php (que no seu caso seria a mesma coisa).

(y)
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#4 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 21/06/2007, 17:25

Olá!
Obrigado pela resposta, e, irei dar uma olhada melhor nesta página porquê tem muita coisa mesmo.

Mas sobre pesar servidor só de requisitar o INDEX.PHP sempre não pesa muito no servidor, pesará muito mais se não sei se é o seu caso, se a URL solicitado será usada para pegar dados de um DB e incluir estes dados.
Mas se a URL solicitada for incluir arquivos ou dados de arquivos já criados ficará bem acessível.
Mas se fosse o caso um VPS seria de um bom custo/benefício se for ter os pageviews que você pretende ter no futuro.
Ou DEDICADO caso não tenha preocupação com o dinheiro. :)
Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#5 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 21/06/2007, 18:43

Então, meu problema de inicio é a falta de verba, tem que iniciar com servidor pequeno mesmo e conforme for aumentando e entrando anunciantes e clientes, ou seja, entrando verba, passar para um semi dedicado e quem sabe um dedicado completo.

Voltando ao script:

Quando qualquer página é requisitada, o Apache chama o index.php, conforme citei.
Dessa forma, consigo ter um controle total sobre o acesso, posso até gravar logs para montar estatísticas, utilizar "paginas virtuais" (que não existem, como em um sistema de noticias por exemplo sem usar querystring), enfim, dá para fazer tudo.

A idéia inclusive é que o script processe qualquer tipo de arquivos, por exemplo, se for uma imagem JPG, o index abre o arquivo, cria os logs que eu quero e retorna o conteudo do arquivo com header() para tipo JPG.

Dessa forma TUDO vai ser processado pelo index... nessa hora que entra minha preocupação, por exemplo, uma página que tenha 10 imagens, vão se, no mesmo instante, pelo menos 11 chamadas ao script... imagina isso vezes mil ou milhão, sei lá....

Sendo que alguns tipos de chamadas consultam o MySQL, outras apenas pegam arquivos nos diretórios e mostram o conteúdo... e outras abrem arquivos e gravam os dados

:unsure:

Edição feita por: Alexx Ares, 21/06/2007, 18:44.

||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#6 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 21/06/2007, 19:07

É use de inicio hospedagem comum mesmo, mas quanto melhor for passando para VPS, DEDICADO, e etc melhor, pois até mesmo se for muito "Peso" para hospedagem comum, os próprios HOSTS bloqueam a conta por causa disso, se for uma dica o XPG aceita isso de boa eles me falaram , e por ter tráfego ILIMITADO ajuda. :)
Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#7 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 21/06/2007, 20:24

Longe de mim fazer propaganda até porque é bom, mas não acho a melhor, mas o site em questão está na Locaweb... Também estou pretendendo colocar um nos mesmos moldes na Hostnet que hospeda o wmonline tem bons preços e parece ter qualidade... acho que o jeito é entrar em contato com alguem da hospedagem e ver o que eles acham ou até quem sabe se eles tem um acompanhamento sobre isso...
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#8 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 22/06/2007, 04:41

É HOSTNET é uma boa opção.
E se não for muito incomodo estou com um problema. ^^.

Se eu não coloco: RewriteCond %{REQUEST_FILENAME} !-f ou RewriteCond %{SCRIPT_FILENAME} !-f

Eu colocando $url[0] ou qualquer outro número na array ele só exibe o nome do arquivo INDEX.PHP por exemplo e não o que está na URL, se eu coloco um dos dois acima ali citados ai sim a array funciona normalmente senão ele volta a exibir somente INDEX.PHP .

Sabe me dizer porquê? Obrigado desde já. :)
Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#9 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 22/06/2007, 09:46

Posta o script completo que não entendi nada.... hahaha... e me refresca a memória, "-f" ?
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#10 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 22/06/2007, 13:40

Olá!

PHP:
$url = explode('/', $_GET['gx']);

HTACCESS:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-*.(css|js|txt|jpg|png|xml|php4)$
RewriteRule ^(.*)$ index.php?gx=$1

Explicação do -f:
RewriteCond %{SCRIPT_FILENAME} !-f 
Não aplica a condição para arquivos

No caso se eu colocar este -f, ficando assim:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-*.(css|js|txt|jpg|png|xml|php4)$
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?gx=$1
Eu acessando normal um diretório tal como: localhost/teste/teste1/
ele lê normal para o INDEX, e se eu colocar no PHP "echo $url[0]" ele mostrará "teste" normalmente, mesmo dentro da pasta real de "teste1" havendo um arquivo index.php ...
Mas... Se eu acessar localhost/teste/teste1/index.php , havendo o -f como dito acima ele deixa acesso normal, ou seja abre este arquivo normalmente sem mandar para o INDEX.PHP , mas se eu tirar o -f ele manda para o INDEX.PHP , porém quando pede no PHP $url[0] (teste) ou $url[1] (teste1) ele só mostra escrito INDEX.PHP e mesmo eu acessando: localhost/teste/teste1/ e se não tiver o -f ele mostrará escrito no array $url[0] ... mostrará escrito INDEX.PHP , porém eu não quero que uma pessoa tente acessar localhost/teste/teste1/index.php diretamenete e abra este arquivo, para não dar "BUG" de só mostrar na array escrito INDEX.PHP tem que colocar -f , mas colocando o -f ele libera acesso normal para todos arquivos diretamente.

Como faço para no caso ele enviar tudo para a INDEX.PHP mas sem dar BUG no array de só mostrar escrito INDEX.PHP ?

Obrigado desde já e desculpe se escrevi muito, tentei explicar ao máximo. :)

PS.: Mesmo requisitando sempre um arquivo com MOD_REWRITE acho que não pesa tanto, pois em fórum como o IPB por exemplo ele acredito que sempre requesita o INDEX.PHP . Claro o IPB é pesado de qualquer forma, mas esse na HOSTNET por exemplo fica bem rápido de se mecher. :)

Edição feita por: lwirkk, 22/06/2007, 13:44.

Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#11 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 22/06/2007, 17:15

Sinceramente não sei, mas tive o seguinte problema no meu sistema, acho meio parecido com o seu:

.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !/admin/
RewriteCond %{REQUEST_FILENAME} !/index.php
RewriteCond %{REQUEST_FILENAME} !/favicon.ico
RewriteCond %{REQUEST_FILENAME} !/robots.txt
RewriteRule ^/?.*/?$ /index.php [L]

Teoricamente, tudo exceto os arquivos index, favicon, robots e a pasta "admin" tem acesso liberado, o resto chama o index.php.

Porém, ao acessar apenas "site.com/admin" ou seja, sem "/" ou sem o "/index.php" dá pau e as vezes entra em loop infinito.
Tentei usar uma série de expressões na condição, com / no fim, sem, com .* etc... e nada, piorava a situação.

Engraçado que no meu servidor local roda perfeitamente, o problema só ocorre quando mando pro servidor (no caso a Locaweb). Vendo o PHP info, percebi que lá é Apache 2.x sendo que o meu local é 1.x... ou seja, alguma incompatibilidade com a versão do Apache, certo?

A solução foi, no index.php da raiz, ao verificar o que o usuario requisitou com REQUEST_URI, se tiver "admin" após a primeira barra eu redireciono com o header() "Location" para admin/index.php

Sacanagem, pois isso acaba gerando um erro 302 de redirecionamento...

Agora tem duas coisas que não testei: instalar o apache 2.x aqui no localhost pra testar e estudar esse lance do -f e -d que eu nãu utilizei ainda... pode ser que forçando de alguma forma funcione!

:blink:
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#12 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 22/06/2007, 17:29

Ah vlww ai, com muitas tentaivas deu certo aqui, coloquei para dar acesso a arquivo .PHP e mudei a extensão do que terá nas subpastas. :)

Edição feita por: lwirkk, 23/06/2007, 16:49.

Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#13 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 08/07/2007, 22:54

Voltando ao tópico original, pesquisando, percebi que o importante não é apenas a quantidade de solicitações que será feita para o arquivo index.php, mas pricipalmente as buscas no MySQL, por exemplo dependendo do sistema de autenticação e outros fatores. Uma boa tática também é gerenciar corretamente os Headers, para que o navegador grave imagens em cache (quando geradas normalmente pelo PHP, imagens não ficam em cache, tem que forçar pelo Header).

Concluindo, acredito que não haverá um desgaste muito grande ao fazer com que TODAS as solicitações do site sejam feitas por um unico arquivo (index.php), sejam elas paginas php, html ou imagens, css, js, etc., desde que não sejam utilizados processos como consultas a BD e coisas que consomem muita memoria.

Um simples file_get_contents e um header com o tipo do arquivo, já retorna o arquivo que você quer, e qualquer coisa que queira gravar (algum log por exemplo) faça em um arquivo de texto com fopen e depois crie um script para ler isso e passar para o BD, em um outro momento.

Estou fazendo isso, por enquanto está tudo ok, toda solicitação do visitante, seja pagina ou imagens ou qualquer outro arquivo passam pelo index.php que antes de retornar o conteudo grava um log de acesso ao arquivo e outras informações que eu quero no sistema em um log.txt

Se alguem tiver alguma dicar para otimizar esse processo ou tenha uma experiencia ou referencia de que isso é errado, favor avisar!

(y)
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq