htaccess mod_rewrite Sub-diretório para subdomínio

1

Estou usando o seguinte RewriteRule para redirecionar sub-domínios de curingas para as pastas correspondentes na sub-direcotry / users:

RewriteCond %{REQUEST_URI} !^/users/ [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$ [NC]
RewriteCond %1 !=www [NC]
RewriteRule ^(.*)$ /users/%1/$1/? [L]

Gostaria de impedir o acesso direto à pasta dos usuários pelo redirecionamento 301 para a versão do subdomínio assim:

www.domain.com/users/username/sub1/sub2/ => username.domain.com/sub1/sub2/

Qualquer ajuda seria muito apreciada!

    
por dSquared 29.09.2011 / 23:41

1 resposta

2

Como você está parando o RewriteRule , se houver um /users/ como o caminho principal, o username.domain.com/users/username/sub1/sub2/ também os levará até lá - provavelmente não como pretendido.

Considere alterar sua configuração existente para subdomínios por usuário para um VirtualDocumentRoot em um vhost com curinga em vez do que está lá, para reduzir a complexidade e reduzir o número de avaliações de regex necessárias por solicitação.

<VirtualHost *:80>
    ServerName usernames.domain.com
    ServerAlias *.domain.com
    VirtualDocumentRoot /dir/to/users/%1
</VirtualHost>

Em seguida, para impedir o acesso à estrutura de diretório /users/ por meio do nome do host normal, aplique-o apenas à configuração do site principal:

RewriteRule ^/users/.*$ - [F]

Se você pretende manter seu tratamento atual dos subdomínios com o mod_rewrite, será necessário expandi-lo para filtrar o nome do host:

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]   # I'm assuming?
RewriteRule ^/users/.*$ - [F]
    
por 30.09.2011 / 00:05