This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/includes/kohana/modules/userguide/guide/ru-ru/tutorials.removeindex.md
2011-05-03 09:49:01 +10:00

4.2 KiB
Raw Blame History

Удаление из URL index.php

Для чистоты URL, Вам наверняка захочется иметь доступ до разделов Вашего приложения без /index.php/ в адресной строке. Для этого необходимо выполнить 2 действия.

  1. Откорректировать bootstrap файл
  2. Установить возможности rewriting'а на Вашем веб-сервере

Конфигурирование Bootstrap

Первое, что следует сделать - это изменить значение index_file в [Kohana::init]:

Kohana::init(array(
    'base_url'   => '/myapp/',
    'index_file' => FALSE,
));

Теперь все ссылки, генерируемые методами [URL::site], [URL::base], и [HTML::anchor] не будут использовать "index.php" при построении URL. Все генерируемые ссылки будут начинаться с /myapp/ вместо /myapp/index.php/.

URL Rewriting

В зависимости от Вашего сервера, rewriting активируется по разному.

Apache

Переименуйте example.htaccess в .htaccess и измените следующую строчку кода:

RewriteBase /kohana/

RewriteBase должен совпадать со значением, указанным у Вас в base_url свойстве [Kohana::init]:

RewriteBase /myapp/

В большинстве случаев - это всё, что необходимо сделать.

Ошибка!

Если вдруг Вы стали получать ошибки в виде "Internal Server Error" или "No input file specified", попытайтесь изменить .htaccess следующее:

RewriteRule ^(?:application|modules|system)\b - [F,L]

Вместо параметра \b попробуйте использовать слеш:

RewriteRule ^(application|modules|system)/ - [F,L]

Если это не поможет, попробуйте изменить следующее:

RewriteRule .* index.php/$0 [PT]

На что-то более простое:

RewriteRule .* index.php [PT]

Всё равно ошибка!

Если всё ещё получаете ошибки, убедитесь, что Ваш хостинг предоставляет поддержку Apache mod_rewrite. Если у Вас есть доступ до изменения настроек Apache, то добавьте следующие строки в конфигурационный файл (зачастую это httpd.conf):

<Directory "/var/www/html/myapp">
    Order allow,deny
    Allow from all
    AllowOverride All
</Directory>

NGINX

Тяжело дать пример конфигурации nginx сервера, но можно использовать следующий пример для server блока:

location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ index.php$uri?$args;
}

location ~ ^(.+\.php)(.*)$ {
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  SCRIPT_FILENAME    $document_root/$fastcgi_script_name;
    fastcgi_param  PATH_INFO          $fastcgi_path_info;

    include fastcgi.conf;

    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
}

Заметьте, что в данном примере используются try_files и fastcgi_split_path_info свойства.

[!!] Этот пример подразумевает, что Вы запускаете PHP как FastCGI сервер на порту 9000 и используете nginx v0.7.31 и выше.

Если с этой конфигурацией Вы получаете ошибки, установите для nginx уровень логов в debug и проверьте access и error логи на предмет ошибок.