2015-07-05 2 views
2

Да, были похожие вопросы, но предлагаемые решения не работают для меня. Итак, я создал Laravel, и установка работает отлично. Ну, до тех пор, как я остаюсь на базовом маршрутеLaravel 5 Apache mod_rewrite не работает

localhost/page/ 

как только я пытался ударить одного из моих маршрутов, скажем

localhost/page/subpage 

и маршрут настроен на возвратить представление

Route::get('subpage', ['as' => 'subpage', 'uses' => '[email protected]']); 

subpage метод в контроллере:

public function subpage() 
      { 

       return view('base.subpage'); 
      } 

Я просто получаю 404 ответ от сервера всякий раз, когда я пытаюсь попасть в один из маршрутов. Не имеет значения, какой контроллер я использую, или если он возвращает представление или закрытие.

  • mod_rewrite включен
  • главного каталога AllowOverride устанавливается в All

мой .htaccess в папке page/public выглядит следующим образом:

<IfModule mod_rewrite.c> 
<IfModule mod_negotiation.c> 
    Options -MultiViews 
</IfModule> 

RewriteEngine On 
RewriteBase/

# Redirect Trailing Slashes... 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

У кого-нибудь есть идея, в чем проблема?

ответ

3

Файл .htaccess не загружается, так как он находится в каталоге public, который действительно предназначен для вашего корня документов. Таким образом, вы должны получить доступ к приложению, выбрав localhost/page/public/subpage.

Если вы хотите использовать localhost/page/subpage в то время сохраняя структуру каталогов нетронутыми, то вам необходимо добавить новый .htaccess файл в каталог page и удалить в .htaccess файл из каталога public.

/page/.htaccess содержание:

<IfModule mod_rewrite.c> 

    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 
    RewriteBase /page/ 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Send requests to public directory... 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule^public/index.php [L] 

</IfModule> 

К сожалению, из-за того, каким образом Laravel получает информацию запроса, вам нужно сгруппировать ваши маршруты в каталог page в конфигурации маршрута:

Route::group(['prefix' => 'page'], function() 
{ 
    Route::get('subpage', ['as' => 'subpage', 'uses' => '[email protected]']); 
    // Your other routes ... 
}); 

По существу, и, на мой взгляд, это самый простой способ обойти это. Вы также можете переместить содержимое своего каталога public на один уровень и соответственно изменить пути в файле начальной загрузки.

+0

Я попробую это позже, но вот еще одно: я пробовал использовать встроенный веб-сервер php и с этим работал нормально? –

+0

Если вы запустите сервер из каталога 'public', он будет работать. Это вы сделали? –

+0

Нет, домашний каталог такой же, как для xampp.для xampp он работает с синтаксисом, подобным этому: server.php/subpage ..., который указывает на ошибку с .htaccess или нет? –

Смежные вопросы