Kohana3: разные .htaccess rewritebase и kohana base_url для dev и производственной среды
В моем 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, оно сломается, потому что RewriteBase в файле .htaccess
будет неправильным. Есть ли способ, которым я могу иметь условное выражение в файле .htaccess
, аналогичном тому, которое у меня есть в бутстрапе, чтобы он использовал правильную RewriteBase?
Ответы
Ответ 1
Я не думаю, что есть способ иметь условный RewriteBase
. Единственный способ в Apache, который приходит на ум, заключается в том, чтобы поместить директиву RewriteBase
в тег <Location>
, но это доступно только в самом httpd.conf, а не в файлах .htaccess.
То, что я обычно делаю в таких случаях, - это определить AccessFileName в локальной среде, например htaccess.txt
. Этот файл будет содержать локальные правила перезаписи, а .htaccess
- серверные.
Ответ 2
Я столкнулся с этим, ища аналогичное решение. Хотя я не получил 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]
Ответ 3
Если ваш файл htaccess находится в базе установки (т.е. рядом с index.php), то вам особенно не нужно RewriteBase, я оставляю его вне своих приложений, и они работают красиво. Даже с двумя установками Kohana, один внутри другого каталога.