88 lines
4.2 KiB
Markdown
88 lines
4.2 KiB
Markdown
|
# Удаление из 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](http://wiki.nginx.org/NginxHttpCoreModule#try_files) и [fastcgi_split_path_info](http://wiki.nginx.org/NginxHttpFcgiModule#fastcgi_split_path_info) свойства.
|
|||
|
|
|||
|
[!!] Этот пример подразумевает, что Вы запускаете PHP как FastCGI сервер на порту 9000 и используете nginx v0.7.31 и выше.
|
|||
|
|
|||
|
Если с этой конфигурацией Вы получаете ошибки, установите для nginx уровень логов в debug и проверьте access и error логи на предмет ошибок.
|