Просто попробуйте laravel 4, который я установил с помощью композитора. Установили виртуальный хост. Работает только корневой маршрут:
Route::get('/', function()
{
return View::make('hello');
});
Даже это не работает
Route::get('/hello', function()
{
return View::make('hello');
});
То, что я пытаюсь нажать, это TasksController
в /tasks
:
Route::resource('tasks', 'TasksController');
Это дает мне 404 тоже.
Что я могу делать неправильно? Я выполнял эти инструкции при установке: http://chris-schmitz.com/getting-started-with-laravel-4/
Также у меня есть файл .htaccess по умолчанию в корне моего проекта:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Я использую mac using localhost.
Просто для смеха посмотрите, работает ли /index.php/hello
.
Если это так, то, скорее всего, это проблема .htaccess
.
Была ли та же проблема, что и Laravel 4 на WAMP (Windows 8).
Решение, которое сработало для меня, было:
Откройте apache httpd.conf и найдите следующую строку:
#LoadModule rewrite_module modules/mod_rewrite.so
#
)httpd.conf
Он должен работать!
sudo a2enmod rewrite
последующим sudo service apache2 restart
У меня была та же проблема, и решение позволило включить переписывающий мод на Apache2
В терминале используйте следующие команды:
$ sudo a2enmod rewrite
$ sudo service apache2 restart
И волшебство!
Имела точно такую же проблему.
Две вещи, которые мне нужно было сделать, чтобы исправить это:
Измените AllowOverride от None до All, например (Apache 2.4.9):
Параметры индексов FollowSymLinks MultiViews AllowOverride All Требовать все предоставленные
FYI: используйте Laravel Homestead вместе с VirtualBox и Vagrant вместо WAMP. Он содержит Nginx вместо Apache, но все работает по умолчанию, поскольку он явно настроен для Laravel.
Даже после включения mod_rewrite вы можете столкнуться с этой проблемой, если вы наложили псевдонимы на вашу папку larvel/public.
Добавление
RewriteBase /your_apache_alias
to.htaccess делает трюк.
Вам не нужно, чтобы/при определении чего-либо другого, кроме дома:
Route::get('hello', function()
{
return View::make('hello');
});
Должен работать.
Так как Laravel 4 - это автозагрузка файлов с карты в статическом файле, вам необходимо обновить этот файл при добавлении нового контроллера. Запустите эту команду для восстановления статического файла:
php composer.phar dump-autoload
Я пробовал все это без успеха, тогда я нашел еще одно сообщение и изменил свой .htaccess на это:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
Довольно ясно, что проблема возникает из-за "mod_rewrite", в некоторых случаях достаточно включить этот модуль в Apache, чтобы устранить его.
Однако в моем случае мне пришлось расширить конфигурацию для VirtualHost следующим образом:
<VirtualHost *:80>
ServerName adplus.local
ServerAdmin [email protected]
DocumentRoot /var/www/adplus.local/project/public
**<Directory "/var/www/adplus.local/project/public">
AllowOverride All
</Directory>**
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
У меня была эта проблема (в Windows с установленным вручную Apache 2.2), и причиной было отсутствие AllowOverride
в моем VirtualHost, поскольку корневой каталог в httpd.conf по умолчанию был равен None.
FileInfo Options=MultiViews
- минимальный набор, необходимый для Laravel.htaccess
например.
<VirtualHost *:80>
DocumentRoot "C:/htdocs/domain.com/laravel/public"
ServerName foo.domain.com
<Directory "C:/htdocs/domain.com/laravel/public">
AllowOverride FileInfo Options=MultiViews
</Directory>
</VirtualHost>
Или используйте AllowOverride All
, если это не работает, и вы не заботитесь о безопасности.
Перейдите к
nano/etc/nginx/sites-available/yoursite
найдите файл try_ и замените, как показано ниже:
try_files $uri $uri/ /index.php?$query_string;
В предыдущем ответе был небольшой недостаток. Это может помочь.
$ sudo a2enmod rewrite
$ sudo service apache2 restart
Надеюсь, он это сделает.
Это похоже на @GaryJ и @MartinGomez. Это содержимое .htaccess, которое должно быть установлено в общедоступной папке для всех ваших проектов laravel 4, запущенных на сервере Apache:
<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]
</IfModule>
Для пользователей Nginx вы, вероятно, скопировали виртуальный хост default
, но Laravel требует некоторой настройки в директиве location
, чтобы позволить приложению Laravel выполнять маршрутизацию, а не Nginx.
В /etc/nginx/sites-available/your-site-name
замените директиву местоположения следующим:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
Затем запустите sudo service nginx reload
, чтобы изменения вступили в силу.
У меня была аналогичная проблема на Ubuntu 14.04 с Lumen 5.4.
Решение было для меня двумя частями. Сначала в моем файле vhost /etc/apache2/sites-enabled/my_vhost.conf
мне пришлось добавить следующую запись <Directory>
, чтобы разрешить переопределения после объявления моего DocumentRoot
:
DocumentRoot /var/www/path/to/my/app/public
<Directory "/var/www/path/to/my/app/public">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Затем мне пришлось включить перезаписывание с помощью
sudo a2enmod rewrite
sudo service apache2 restart
Этот комментарий может быть немного запоздалым, но это может помочь. У меня была такая же проблема при маршрутизации на другое представление:
Route::get('index', function () {
return view('index');
});
Route::get('login', function () {
return view('login');
});
Но не работал, поэтому я попробовал все, что нашел во всех связанных сообщениях, но этого было недостаточно для решения моей проблемы, поэтому я нашел эти строки на httpd.conf:
<Files ".ht*">
Require all denied
</Files>
Итак, я изменил "denied" на "предоставленный", а также прокомментировал эту строку на моем .htaccess:
#RewriteBase /
И работает! Я думаю, что эти строки заставляют Apache не рассматривать файл .htaccess вашего проекта, поэтому превращение его в предоставленное давало разницу. Надеюсь, это поможет кому-то с той же проблемой.
Работа с Apache Server 2 @Manjaro Linux (на основе Archlinux)
Это обновление работало для меня. В файле .htaccess просто добавьте следующее после включения Rewriterules.
Options -Indexes
Options +FollowSymLinks
Работает как шарм