URI Reescreva com subdomínios falsos e múltiplas variáveis

1

Alguém por favor pode ajudar a tentar usar o mod rewrite, então foo.domain.com é reescrito em domain.com/p.php?s=foo e foo.domain.com/bar to domain.com/p.php?s=foo&p=bar ?

Atualmente, meu .htaccess é:

RewriteEngine On

# Remove www
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

# Rewrite subdomain etc.
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^([^/]+)/?$ p.php?s=%1&p=$2 [QSA,L,NC]

Mas não consigo descobrir como pegar a segunda variável (sendo opcional e depois de uma barra no final do URI. Tentei alterar o final da condição para ?/(.*)$ , mas sem sucesso e minhas habilidades de reescrita mod certamente são naff!

    
por Rich 14.11.2012 / 18:40

2 respostas

1

Isso interrompe o redirecionamento estranho, mas não remove a barra do URI (estou pensando em uma perspectiva de SEO em que vários URIs para conteúdo duplicado são ruins :)) ele precisa de um redirecionamento? Eu tentei adicionar a bandeira R = 301, mas isso não funcionou. Alguma idéia?

(Desculpe por adicionar resposta, o botão "adicionar comentário" literalmente desapareceu!)

    
por 14.11.2012 / 23:16
0

Se não houver problema em colocar o parâmetro p vazio no caso de uma parte vazia do URL, o seguinte deve funcionar:

# Rewrite subdomain etc.
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !p.php
RewriteRule ^(.+/)?([^/]*)$ p.php?s=%1&p=$2 [QSA,L,NC]

Caso você queira deixar de fora completamente o p em caso de hit direto para foo.domain.com, você precisa adicionar à regra acima também especial para este caso, correspondendo a URL vazia - assim:

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !p.php
RewriteRule ^$ p.php?s=%1 [QSA,L,NC]
    
por 14.11.2012 / 20:43