10

私の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を使用するように、ブートストラップにあるものと同様の条件をファイルに含める方法はありますか?

4

3 に答える 3

8

条件付きにする方法はないと思いますRewriteBase。頭に浮かぶApacheの唯一の方法は、RewriteBaseディレクティブを<Location>タグに入れることですが、それはhttpd.conf自体でのみ利用可能であり、.htaccessファイルでは利用できません。

このような場合に私が通常行うことは、たとえば、ローカル環境で別のAccessFileNamehtaccess.txtを定義することです。そのファイルにはローカルの書き換えルールが.htaccess含まれ、サーバー側のルールが含まれます。

于 2010-03-23T16:22:52.597 に答える
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]
于 2010-04-21T21:43:34.293 に答える
2

htaccessファイルがインストールベース(つまり、index.phpの隣)にある場合は、特にRewriteBaseは必要ありません。アプリケーションから除外すると、美しく機能します。2つのKohanaインストールがあっても、1つはもう1つのディレクトリ内にあります。

于 2010-07-11T23:40:25.877 に答える