Como usar o mod_rewrite para abstrair o pedido get com subdomínios

1

Eu estive nisso o dia todo e achei que tinha controle sobre as expressões regulares, mas não estou mais confiante de que faço isso. Eu procurei por todos os lugares, li alguns guias horríveis sobre o mod_rewrite e fiquei perplexo.

Eu quero fazer com que a chamada

subdomain.domain.com/u/satbirkira 

parece exatamente igual ao acima, mas executa e exibe isso

 domain.com/user.php?user_name=satbirkira?subdomain_given=subdomain

Deve ser extremamente simples, mas não consigo. Aqui está o que eu criei:

RewriteCond %{HTTP_HOST} ^(.*)user.php\?user_name=(.*)$ [NC]

RewriteRule ^(.*)$ http://%1%{REQUEST_URI}/u/$3

Eu não tenho idéia de por que alguns RewriteCond quebram se você remover pontos de captura inúteis como o primeiro (. *), mas eu aprendi a rolar com ele. Eu agradeceria se alguém explicasse porque a abordagem está incorreta, sintaxe, pontos de captura e a substituição, bem como variáveis.

Editar

É semelhante ao objetivo em # 4 no link , "4 ) Reescrevendo yoursite.com/user.php?username=xyz para yoursite.com/xyz "espere que a resposta não faça sentido para mim.

    
por Satbir Kira 11.12.2013 / 05:54

2 respostas

1

A parte ?user_name=satbirkira pode ser um pouco complicada para alimentar o PHP com uma reescrita, dependendo de como o PHP está acessando os dados - alguns aplicativos acabam recebendo a string de consulta original, e não a reescrita.

Mas, por enquanto, vamos começar com isso e ver onde isso nos leva. Isso deve estar em VirtualHost context, se estiver em <Directory> ou .htaccess , precisará ser ajustado ...

RewriteRule ^/u/([^/]+)/?$ /user.php?user_name=$1 [L]

Para .htaccess ( que você não deve usar! ):

RewriteRule ^u/([^/]+)/?$ user.php?user_name=$1 [L]
    
por 11.12.2013 / 06:20
1

Isso deve funcionar:

RewriteCond %{HTTP_HOST}    (.*).domain.com
RewriteRule ^/u/([^/]+)/?$ /user.php?user_name=$1&domain_given=%1 [P]

Lembre-se de como o LHS do RewriteRule é testado primeiro. Em seguida, o RewriteCond LHS é comparado ao RHS e, se isso corresponder à substituição, ocorrerá. As seqüências de caracteres que você captura no RHS de um RewriteCond são armazenadas em% 1,% 2 etc ... Aquelas que você captura no LHS de uma RewriteRule em $ +, ä2 etc ...

    
por 11.12.2013 / 13:40