Apache RewriteRule para o diretório raiz
-
05-07-2019 - |
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?
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
- usar o diretório especifica Apache na configuração
- Editar a configuração para permitir que você especificado por você mesmo, ou
- 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>