Kohana3: Diferente .htaccess rewritebase e kohana base_url para o ambiente de desenvolvimento e produção

StackOverflow https://stackoverflow.com/questions/2501536

Pergunta

No meu bootstrap.php Eu tenho o seguinte:

if($_SERVER['SERVER_NAME'] == 'localhost')
    Kohana::$environment = 'development';
else
    Kohana::$environment = 'production';

...

switch(Kohana::$environment)
{
    case 'development':
        $settings = array('base_url' => '/kohana/', 'index_file' => FALSE);
        break;

    default:
        $settings = array('base_url' => '/', 'index_file' => FALSE);
        break;
}

Dentro .htaccesstem isso:

# Installation directory
RewriteBase /kohana/

Isso significa que, se eu apenas carregar meu aplicativo Kohana, ele quebrará porque a base de reescrita no .htaccess o arquivo estará errado. Existe uma maneira de ter um condicional no .htaccess Arquivo semelhante ao que eu tenho no bootstrap para que ele use o RewriteBase correto?

Foi útil?

Solução

Eu não acho que existe uma maneira de ter um condicional RewriteBase. A única maneira de Apache que vem à mente é colocar o RewriteBase diretiva em um <Location> Tag, mas isso está disponível apenas em httpd.conf, não em arquivos .htaccess.

O que eu costumo fazer nesses casos é definir um diferente AccessFileName no ambiente local, por exemplo htaccess.txt. Esse arquivo conterá as regras de reescrita local, enquanto .htaccess contém os do lado do servidor.

Outras dicas

Eu encontrei isso enquanto procurava uma solução semelhante. Embora eu não tenha recebido o RewriteBase para definir condicionalmente, obtive um efeito semelhante ao definir uma variável de ambiente e usando isso nas regras a seguir. Aqui está um exemplo do que quero dizer.

# Set an environment variable based on the server name
RewriteRule %{SERVER_NAME} localhost [E=REWRITEBASE:/local_dir/]
RewriteRule %{SERVER_NAME} prodhost [E=REWRITEBASE:/prod_dir/]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{ENV:REWRITEBASE}%{REQUEST_FILENAME} !-f 
RewriteCond %{ENV:REWRITEBASE}%{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^static

# Rewrite all other URLs to index.php/URL
RewriteRule .* %{ENV:REWRITEBASE}index.php/$0 [PT]

Se o seu arquivo htaccess estiver na base de instalação (ou seja, ao lado do index.php), você não precisará de reescrever, deixo -o de fora dos meus aplicativos e eles funcionam lindamente. Mesmo com duas instalações de Kohana, uma dentro do outro diretório.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top