Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 25.05.2012 10:46:04

oldeev
Откуда: Lübeck
Сообщений: 28

Короткиe URL

Я только приступил, и не получается с короткими URL. index.phpубирается, а public нет. Из статьи следует что это делается
через .htaccess. Я скопировал его из статьи, проверил в конфиге сервера (XAMPP, modrewrite включен). Безуспешно. Заранее признателен за помощь.

(См. Решение от Павла ниже — прим. адм.)

Изменено Proger_XP (21.12.2012 22:50:19)

Не в сети

#2 25.05.2012 11:20:42

Re: Короткиe URL

В статье правило для mod_rewrite:

RewriteEngine On
RewriteRule ^/?(.*)$ public/index.php/$1 [L]

...только даёт возможность открывать страницы типа http://localhost/laravel/mypage/... без необходимости добавлять public:  http://localhost/laravel/public/mypage/....

Laravel по-прежнему будет генерировать public в своих ссылках - полноценное решение - это смена DocumentRoot или создание символической ссылки, но если к этому нет доступа (или это локальный сервер для разработки) можно просто установить url в файле application/config/application.php. Например, если Laravel находится в корне localhost под именем laravel, то это выглядит так:

<?php

return array(

	/*
	|--------------------------------------------------------------------------
	| Application URL
	|--------------------------------------------------------------------------
	|
	| The URL used to access your application without a trailing slash. The URL
	| does not have to be set. If it isn't we'll try our best to guess the URL
	| of your application.
	|
	*/

	'url' => '/laravel',

Тогда новые URL будут иметь вид http://localhost/laravel/mypage/.... Думаю, добавлю потом это в статью.

Не в сети

#3 25.05.2012 12:24:00

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

Спасибо за ответ. но в том и дело, что при этом .htaccess не удается избавиться от public, приходится добавлять public в адресную строку. На локале можно, конечно, лезть в конфиг файл, но хочется делать так, как на хостинге, там-то не полезешь.

Не в сети

#4 25.05.2012 12:58:03

Re: Короткиe URL

при этом .htaccess не удается избавиться от public

То есть .../laravel/mypage не работает? А то выдаёт? 404 страницу Апача или 404 Laravel?

Не в сети

#5 25.05.2012 14:37:23

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

http://localhost/laravel/  выдает  404 Laravel. А http://localhost/laravel/public/ выдает нормально дом. страницу.

Не в сети

#6 25.05.2012 20:38:06

medar
Откуда: Москва
Сообщений: 36

Re: Короткиe URL

Вот с этим .htaccess должно работать - http://forums.laravel.com/viewtopic.php?id=1258

Не в сети

#7 25.05.2012 21:33:16

Re: Короткиe URL

Странно, не вижу причин, почему оно может не работать. Попробуй ещё ссылку medar.

Не в сети

#8 25.05.2012 21:42:20

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

Спасибо за ссылку. Поставил фреймворк с 0, записал нов. файл .htaccess, поставил'index' => '' в application/config/application.php. Больше ничего не менял. По адресу http://localhost/laravel/public/ выдает нормально дом. страницу, по адресу http://localhost/laravel/index.php тоже, а по адресу  http://localhost/laravel/    выдает   We took a wrong turn. Server Error: 404 (Not Found) - ошибка laravel. Я чего-то не понимаю: .htaccess сработает сразу, понятно. А чтобы добраться до файла application/config/application.php , сначала надо загрузить стартовый файл, и только потом считается конфиг?

Не в сети

#9 25.05.2012 22:14:16

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

полагаю, какая-то ерунда в настройках сервера. Хотя у меня штатный xampp, устанавил все с настройками по умолчанию. ???

Не в сети

#10 25.05.2012 23:47:38

Re: Короткиe URL

по адресу http://localhost/laravel/index.php тоже, а по адресу  http://localhost/laravel/    выдает   We took a wrong turn

Это действительно ерунда получается. Я сам пользуюсь XAMPP, Laravel заводился всегда с пол оборота.

А чтобы добраться до файла application/config/application.php , сначала надо загрузить стартовый файл, и только потом считается конфиг?

Нет, определение адреса там в любом случае происходит уже после инициализации, поэтому конфиги читаются до этого.

Для проверки можешь открыть laravel/laravel.php и добавить сюда:

$uri = URI::current();

/* сюда */

Request::$route = Routing\Router::route(Request::method(), $uri);

строку:

var_dump($uri);

Посмотри, что получишь за адрес. При запросе домашней страницы это должно быть /, при любой другой - соответственно адрес, например /laravel/mypage/param = mypage/param.

Кстати, я сам пока пользуюсь версией 3.1.9, но было бы странно, если бы в 3.2 появился такой глюк. Но для верности можешь скачать старый билд и попробовать на нём.

Не в сети

#11 26.05.2012 00:54:02

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

Спасибо. Попробую 3.19. Только где бы ее найти? На офиц. сайте по кнопке для скачивания - 3.2, и в гугле не нашел.


При запросе http://localhost/laravel/  выдает 'laravel',
При запросе http://localhost/laravel/cont/3   выдает  string 'laravel/cont/3' (length=14)


при запросах http://localhost/laravel/public/
и
http://localhost/laravel/index.php
выдает как положено '/'

Изменено oldeev (26.05.2012 01:20:01)

Не в сети

#12 26.05.2012 08:02:46

Re: Короткиe URL

Меня ночью осенило и я вспомнил, как недели две назад решал аналогичный баг на англоязычном форуме. В классе URI есть косяк (или фича), которая отрезает базовый URL ил детектированного в пути:

Короче говоря, попробуй переименовать папку Laravel из localhost/laravel во что-то другое типа localhost/lara. Если поможет, объясню, в чём проблема.

Только где бы ее найти?

Вообще можно зайти в GitHub, нажать master, выбрать Tags -> 3.1.9 и нажать Zip. Но если хочешь я скинул архив на сервер: laravel-v3.1.9-0-gaf42dec.zip.

Не в сети

#13 26.05.2012 12:35:13

medar
Откуда: Москва
Сообщений: 36

Re: Короткиe URL

Возможно, дело в том, что http://localhost/laravel/ - это не корень веб-сервера, а .htaccess заточен на то, что все будет лежать в корне, т.е. localhost или каком-нить laravel.dev
По идее, в таком случае должна помочь директива RewriteBase /laravel/ , я попробовал, но оно у меня не завелось.

Не в сети

#14 26.05.2012 14:24:04

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

Proger_XP пишет:

Меня ночью осенило и я вспомнил, как недели две назад решал аналогичный баг на англоязычном форуме. В классе URI есть косяк (или фича), которая отрезает базовый URL ил детектированного в пути:

Короче говоря, попробуй переименовать папку Laravel из localhost/laravel во что-то другое типа localhost/lara. Если поможет, объясню, в чём проблема.

Только где бы ее найти?

Вообще можно зайти в GitHub, нажать master, выбрать Tags -> 3.1.9 и нажать Zip. Но если хочешь я скинул архив на сервер: laravel-v3.1.9-0-gaf42dec.zip.

Сделал, все осталось по прежнему. Попробую скачать другую сборку. Спасибо за участие.

Не в сети

#15 26.05.2012 14:36:53

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

С новой сборкой (3.19) сразу запахал, так что на офиц. сайте  (3.2) - с багом выложена. Спасибо Proger_XP, medar за помощь.

Изменено oldeev (26.05.2012 15:55:18)

Не в сети

#16 28.05.2012 09:46:38

Re: Короткиe URL

С новой сборкой (3.19) сразу запахал, так что на офиц. сайте  (3.2) - с багом выложена.

Ничего себе. Многие винят Тейлора, что он поторопился выпускать 3.2. Нет желания заполнить баг-репорт?

UPD: оказывается, medar уже это сделал smile

Не в сети

#17 01.06.2012 22:43:59

oldeev
Откуда: Lübeck
Сообщений: 28

Re: Короткиe URL

Proger_XP пишет:

С новой сборкой (3.19) сразу запахал, так что на офиц. сайте  (3.2) - с багом выложена.

Ничего себе. Многие винят Тейлора, что он поторопился выпускать 3.2. Нет желания заполнить баг-репорт?

UPD: оказывается, medar уже это сделал smile

medar, я что-то не въехал, в ответ автор написал /и дал ссылку/ про миграцию с одной версии на другую. При чем здесь это? То ли он не понял вопрос, то ли я - ответ.

Не в сети

#18 02.06.2012 10:07:51

medar
Откуда: Москва
Сообщений: 36

Re: Короткиe URL

Это он не понял вопроса, подумал, что я неправильно отмигрировался на 3.2 с 3.1.9

Не в сети

#19 02.06.2012 15:38:00

Re: Короткиe URL

А ты так и не решил эту проблему, medar? Я на 3.2 даже ещё не перешёл, хотя пару файлов с новыми фичами перенёс с 3.1.9.

Не в сети

#20 02.06.2012 15:59:58

medar
Откуда: Москва
Сообщений: 36

Re: Короткиe URL

Не решил, но я и не решал. Я под каждый проект завожу отдельный локальный домен, в таком случае проблемы нет, .htaccess работает. Проблема появляется только если держать проект в папке домена.

Не в сети

#21 21.12.2012 22:43:00

Павел

Re: Короткиe URL

У меня тоже были проблемы с короткими урл. Сайт находится по адресу http://localhost/laravel.
Конфигурил апач через алиас: Alias /laravel /home/pol/web/laravel/public
При активном index.php все работало. Как убираю index.php из урл, так работает только стартовая страница.
.htaccess использовал стандартный (версия 3.2.12)

Решилось добавлением RewriteBase /laravel/ в стандартный .htaccess

Надеюсь еще кому поможет.

#22 09.01.2013 00:00:49

Re: Короткиe URL

Скажите пожалуйста, а в чем изюминка такого подхода, зачем так сделали?
Главное из коробки всегда нужно настраивать будет.
Т.е. я настроил, все работает и все адреса сайта будут доступны с public и без выходит
http://laravel.dev/docs
http://laravel.dev/public/docs
И так каждый хостер со своим приколом, еще с этим морочиться)

Изменено amberlex (09.01.2013 00:08:43)

Не в сети

#23 09.01.2013 10:46:40

Re: Короткиe URL

Идея в том, что для безопасности лучше, когда скрипты лежат вне корня сайта (DocumentRoot в Apache). Но не все могут это сделать, так как требует доступ к настройкам хостов сервера, чего на обычных shared-хостингах нет. Другое дело, что изменив paths.conf можно заставить Laravel работать не public (переместив всю библиотеку туда), но если не хочется менять ядро, то на этот случай и есть такой способ с mod_rewrite.

Не в сети

#24 09.01.2013 20:05:40

Re: Короткиe URL

Я че и заинтересовался, почему так мудрено в Laravel. В CakePHP тоже так сделано с двумя htaccess-ми, но там уже в корне есть htacces.
В Kohana достаточно вынести application, modules и system за корень и указать в index.php к ним пути.

Не в сети

Подвал раздела