Ajuda com o mod_redirect do apache

2

Eu tenho centenas de URLs criados dinamicamente - foo.com/123, foo.com/contact, etc.

Gostaria de redirecionar todas essas URLs (não sei todas elas, apenas saiba que existem a-z ou 1-9) para apenas foo.com.

Por favor, deixe-me saber como isso pode ser feito usando regras de reescrita do apache

Eu tentei: RewriteRule ^(.*)$ index.php

Mas isso não funciona.

    
por user39292 23.06.2010 / 16:58

3 respostas

0

Como foi respondido por Brian acima:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=301]

Como sugerido por Chris acima:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=307]

Se você está tentando fazer um redirecionamento interno, onde o URL não é reescrito no navegador:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php

O método de Brian fará um redirecionamento 301. Isso dirá a qualquer mecanismo de pesquisa / navegador / cache que o conteúdo foi movido permanentemente, o URL existente desapareceu e não deve ser usado. O método de Chris fará um redirecionamento 307. 307 é o equivalente HTTP / 1.1 de um redirecionamento temporário. Ambos irão reescrever a URL no navegador, ambos terão o efeito da pessoa indo para o site, clicando nessa URL e sendo redirecionado para a nova url de foo.com/index.php. O último método fará a reescrita da url internamente para que a URL no navegador permaneça foo.com/contact em vez de foo.com/index.php

Nenhuma das regras realmente passa nenhum parâmetro para index.php, portanto, o 301 & Redirecionamentos 307, na verdade, perderiam o restante da URL. Se você estiver usando os redirecionamentos 301/307 para redirecionar tudo para uma página de entrada, esse comportamento pode ser aceitável. Se essa for sua intenção, sugiro usar:

ErrorDocument 404 /index.php

e, em seguida, verifique se todas as imagens / links estão relativamente / absolutamente vinculados nessa página ou se você usa um para garantir que os URLs sejam reescritos corretamente na página resultante.

Se você quiser passar o URI solicitado para index.php como um parâmetro para análise:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php?page=$1

Nesse caso, $ _REQUEST ['page'] conteria / contact de foo.com/contact

    
por 23.06.2010 / 18:25
2

Sua regra de reescrita causará um loop infinito, porque index.php também corresponde a ^(.*)$ . Você deve ser capaz de fazer algo assim (não testado):

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=301]

O [R=301] adicional retornará um código de status de redirecionamento "movido permanentemente".

    
por 23.06.2010 / 17:05
0

Com base em sua estrutura de URL, ele provavelmente não quer o [R = 301] como ele está tentando fazer URLs bonitas.

    
por 23.06.2010 / 17:09