Kohana3:开发和生产环境的不同.htaccess rewritebase和kohana base_url

时间:2010-03-23 16:07:16

标签: php .htaccess kohana kohana-3

在我bootstrap.php我有以下内容:

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

.htaccess中有这个:

# Installation directory
RewriteBase /kohana/

这意味着如果我只是上传我的kohana应用程序,它将会中断,因为.htaccess文件中的RewriteBase会出错。有没有一种方法可以在.htaccess文件中使用类似于我在引导程序中的条件,以便它将使用正确的RewriteBase?

3 个答案:

答案 0 :(得分:9)

我认为没有办法让条件RewriteBase。想到Apache的唯一方法是将RewriteBase指令放入<Location>标记,但这只能在httpd.conf本身中使用,而不能在.htaccess文件中使用。

在这种情况下,我通常会在本地环境中定义不同的AccessFileName,例如htaccess.txt。该文件将包含本地重写规则,而.htaccess包含服务器端规则。

答案 1 :(得分:5)

我在寻找类似解决方案时遇到了这个问题。虽然我没有有条件地设置RewriteBase,但我确实通过设置环境变量并在以下规则中使用它来获得类似的效果。这是我的意思的一个例子。

# 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]

答案 2 :(得分:2)

如果您的htaccess文件位于安装基础(即index.php旁边),那么您并不特别需要RewriteBase,我将其从我的应用程序中删除,它们可以很好地工作。即使有两个Kohana安装,一个在另一个目录中。