Pergunta

Eu costumava ter a seguinte regra no meu .htaccess ao construir um site:

RewriteRule ^test/(.*) cgi-bin/router.py?request=$1 [NC]

Sempre que o usuário vai para mysite.com/test/something eles se redirecionado para cgi-bin/router.py?request=something. Isso funcionou muito bem. Agora terminei o site e quiser 'ligar'. No entanto simplesmente removendo o bit test/ da regra não trabalho, embora deva acordo com aqui aqui :

RewriteRule ^(.*) cgi-bin/router.py?request=$1 [NC]

Eu também tentei ^$ mas então eu perder tudo o que foi o usuário digitou na url.

I ao concluir meu erro regex?

Foi útil?

Solução

Tente adicionar um / na frente dele, e uma $ no final.
Como:

RewriteRule ^/(.*)$ cgi-bin/router.py?request=$1 [NC]

Além disso, acho que é melhor usar a directiva RewriteBase ao testar. Depois, é só alterar que, em vez de ter que mexer com os próprios regulares-expressões.

RewriteBase /test/ 
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]

E, quando mudou-se para o mundo real:

RewriteBase /
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]

Editar
Depois de mais alguns testes, eu descobri que o problema não é, talvez, com a própria expressão, mas sim com o seu nome do diretório: cgi-bin/. Apache, por padrão, usa este diretório para scripts CGI, mas usos ScriptAlias às solicitações de redirecionamento para /cgi-bin/* para outro diretório. No meu caso um diretório chamado o mesmo no diretório de instalação do Apache.

Este é um diretório que você mesmo criou, ou você está usando o diretório Apache tem alias isso?
Você tem que quer

  1. usar o diretório especifica Apache na configuração
  2. Editar a configuração para permitir que você especificado por você mesmo, ou
  3. Escolha outro nome de diretório.

Pessoalmente, eu iria com # 3. Eu tentei isso, e funcionou muito bem para mim.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} !bin/
    RewriteRule ^(.+) bin/request.php?ctrl=$1 [NC,L]
</IfModule>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top