Reescreva a regra para redirecionar todas as subpáginas para uma única página?

2

Eu tenho dois dois arquivos /etc/apache2/sites-available/foo e /etc/apache2/sites-available/foo_maintenance

A regra de regravação que eu uso em /etc/apache2/sites-available/foo é

<Directory /var/www/public_html>
        Options +FollowSymlinks
        RewriteOptions inherit
        RewriteEngine on
        #
        RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
        RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]
</Directory>

para que todos os mysite.com/* redirecionem para www.mysite.com

Depois de desativar meu site para manutenção, se o usuário navegar para uma subpágina do site, como mysite.com/subdir/something.php, eu gostaria de redirecioná-lo para www.mysite.com para que o index.html da página de manutenção seria exibida.

Qual é a regra de reescrita para redirecionar todo o tráfego de qualquer subpágina para www.mysite.com ?

    
por user784637 19.06.2012 / 10:11

2 respostas

4
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]

RewriteRules tem três partes. Um padrão para combinar, a substituição e as bandeiras. O padrão nesse caso é ^(.*)$ . O ^ representa o início da linha e o $ representa o final da linha. O . representa qualquer caractere e o * a seguir significa que ele pode ocorrer qualquer número de vezes. Agora, os parênteses redondos definem um grupo de captura, que basicamente armazena tudo o que ocorre entre os parênteses. Esses grupos de captura estão disponíveis para você usar na substituição. Portanto, se a solicitação for /subdir/something.php , o primeiro grupo de captura conterá "/subdir/something.php".

A substituição nesse caso é http://www.mysite.com/$1 e o $1 representa o primeiro grupo de captura no padrão correspondente. O URL de destino é formado pelo preenchimento desses grupos de captura, que nesse caso produzirão http://www.mysite.com/subdir/something.php .

Portanto, se você quiser sempre enviar os usuários para a raiz de www.mysite.com , independentemente do caminho que eles solicitaram, basta preencher o caminho na substituição, ou seja, removendo a parte $1 . Sua regra final ficará assim:

RewriteRule ^(.*)$ http://www.mysite.com/ [R=301,L]
    
por 19.06.2012 / 10:25
5

Você pode seguir algo como:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteRule ^.*$ http://www.mysite.com/ [L]
  • A linha 1 ativa o mecanismo de reescrita neste contexto.
  • A linha 2 verifica se a solicitação é enviada para meusite.com .
  • A linha 3 verifica se o URI solicitado já não está / .
  • A linha 4 redireciona todos os endereços para link .
por 19.06.2012 / 10:19