Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kohana3: Different .htaccess rewritebase and kohana base_url for dev and production environment

In my bootstrap.php I have the following:

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;
}

In .htaccesshave this:

# Installation directory
RewriteBase /kohana/

This means that if I just upload my kohana application, it will break because the RewriteBase in the .htaccess file will be wrong. Is there a way I can have a conditional in the .htaccess file similar to the one I have in the bootstrap so that it will use the correct RewriteBase?

like image 290
Svish Avatar asked Mar 23 '10 16:03

Svish


2 Answers

I don't think there is a way to have a conditional RewriteBase. The only way in Apache that comes to mind is putting the RewriteBase directive into a <Location> tag but that is only available in httpd.conf itself, not in .htaccess files.

What I usually do in such cases is define a different AccessFileName in the local environment, for example htaccess.txt. That file will contain the local rewrite rules, while .htaccess contains the server side ones.

like image 96
Pekka Avatar answered Nov 11 '22 18:11

Pekka


I ran across this while looking for a similar solution. While I didn't get RewriteBase to set conditionally, I did get a similar effect by setting an environment variable and using that in the following rules. Here's an example of what I mean.

# 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]
like image 27
mozillalives Avatar answered Nov 11 '22 17:11

mozillalives