Подтвердить что ты не робот

Маршруты Laravel не работают, конфигурация Apache разрешает только public/index.php/route

Пример:

Route::get('/get', function() {
    return 'get';
});

Чтобы просмотреть маршрут выше, я должен перейти к public/index.php/get.

Я просмотрел довольно много сообщений SO и искал разные вещи, и это не изменило (да, я каждый раз перезапускаю Apache).

Вот мой .htaccess в общедоступном каталоге:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
</IfModule>

# For all files not found in the file system, reroute the request to the
# "index.php" front controller, keeping the query string intact

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Что может быть причиной этого? Я запускаю Ubuntu.

4b9b3361

Ответ 1

Установлен ли и установлен ли mod_rewrite на apache? Попробуйте удалить строки if (и) и посмотреть, вызывает ли это ошибку при попытке загрузить веб-сайт. Если это так, запустите sudo a2enmod rewrite и перезапустите apache.

Это .htaccess, который у меня есть в моем общедоступном/каталоге:

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

    RewriteEngine On

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

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

Ответ 2

Двумя наиболее распространенными причинами такого поведения являются:

  • mod_rewrite не включен

    sudo a2enmod rewrite && sudo service apache2 restart

  • AllowOverride установлено значение None, установите для него значение All, предполагая, что Apache2.4

    sudo nano /etc/apache2/apache2.conf

найдите <Directory /var/www/> и измените AllowOverride None на AllowOverride All, затем сохраните файл и перезапустите apache

Ответ 3

Изменение AllowOverride None до AllowOverride All и sudo a2enmod rewrite && sudo /etc/init.d/apache2 reload действительно помогло.

Ответ 4

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

  <IfModule mod_rewrite.c>
     RewriteEngine On

     <Directory /home/vitela/laravel/public>
      RewriteBase /public
      RewriteRule ^(.*)/$ /$1 [L,R=301]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ /index.php [L,QSA]
     </Directory>
  </IfModule>

Ответ 5

В MacOs. Основная проблема .htaccess не работает - в файле httpad.conf конфигурации apache не поддерживается mod_rewrite.so. я решил это, раскомментируя строку:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Удалите # из строки httpdf.conf сверху. Тогда это сработает. наслаждайтесь!

Ответ 6

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

<Directory "/var/www/laravel-sample-project/public">
   AllowOverride All
</Directory>

Это может решить вашу проблему на маршрутах Laravel.

Также убедитесь, что вы предоставляете доступ "AllowOverride All", ограниченный каталогами, такими как упомянутые выше, и ограниченный каталогом /var/www/laravel-sample-project/public (упомянутый здесь корневой каталог для моего проекта, который может варьироваться для тебя)