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 .htaccess
have 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?
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.
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With