Маршруты 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.
Ответы
Ответ 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 (упомянутый здесь корневой каталог для моего проекта, который может варьироваться для тебя)