Para simplesmente redirecionar todos os urls que não têm um /
dentro deles, você poderia conseguir com um simples AliasMatch (de mod_alias ):
AliasMatch ^/([^/]+) /path/to/handler.php
Você pode então examinar a variável de ambiente REQUEST_URI
em seu script para processar
o usuário para exibir.
E, para coisas adicionais, como /about
handling:
AliasMatch ^/([^/]+)/(about|videos|blah) /path/to/handler.php
ou você pode fazer com que ele corresponda a apenas dois níveis (assim, caminhos como /x/y/z
não serão manipulados) da mesma forma que fizemos com a parte do usuário acima ( [^/]+
um ou mais caracteres que não são uma barra):
AliasMatch ^/([^/]+)/([^/]+) /path/to/handler.php
E novamente use o REQUEST_URI
para descobrir o que exibir.
Isso exibirá o URL da página "no estado em que se encontra" (para que a URL permaneça a mesma em sua barra de localização no navegador), ainda que o conteúdo seja gerado por /path/to/handler.php
.
Estas seriam duas regras separadas. Provavelmente haveria uma maneira de manipular apenas um /username
e /username/something
em uma regra, mas provavelmente acabaria ficando ilegível. Eles são feitos dessa maneira para evitar corresponder tudo depois de domain.com
.
Se você precisar mudar o caminho para os argumentos para o script, então você está na terra de RewriteRule
(de mod_rewrite ). Se você quiser manter o URL na barra de localização
você terá que fazer uma consulta de proxy reverso:
RewriteEngine On
RewriteRule ^/([^/]+) /path/to/handler.php?user=$1 [LP]
RewriteRule ^/([^/]+)/(about|videos|blah) /path/to/handler.php?user=$1&args=$2 [LP]
Isso salvaria o script tendo que processar REQUEST_URI
e pode extrair variáveis de $_GET['user']
e $GET['args']
se estiver usando PHP.
Novamente, como AliasMatch
, essa segunda regra poderia ser:
RewriteRule ^/([^/]+)/([^/]+) /path/to/handler.php?user=$1&args=$2 [LP]
mas note que, para ambos, o seu script terá de saber como lidar com tudo o que corresponda a dois URLs. Isso pode não ser o que você deseja para esses URLs, como:
/errors/404.html
/about/google.html
e assim por diante.