Маршруты не работают без index.php
Im, использующий laravel 4.
У меня есть вид nest.blade.php
и соответствующий контроллер NestController.php:
Содержимое контроллера:
class NestController extends BaseController {
public function showView()
{
return View::make('nest');
}
}
Маршрут:
Route::get('/nest', '[email protected]');
Когда я перехожу к url /nest, это не работает.
Когда я перехожу к url /index.php/nest, он работает.
Очевидно, я просто хочу, чтобы это было/гнездо без index.php.
Как я могу это решить?
Мой 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>
Ответы
Ответ 1
Довольно URL
Структура поставляется с общедоступным /.htaccess файлом, который используется для разрешения URL без index.php. Если вы используете Apache для обслуживания своего Laravel приложение включить модуль mod_rewrite.
Если файл .htaccess
, который поставляется с Laravel, не работает с вашим
Установка Apache, попробуйте следующее:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Для получения дополнительной информации см. этот ответ.
Ответ 2
Я включил модуль mod_rewrite на HTTP-сервере Apache, перезапустил службу Apache и снова протестировал его, и он РАБОТАЛ!!!
Ниже приведен код, который я использовал для включения mode_rewrite;
1) Отмените эту строку в Apache/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
2) Создайте новую конфигурацию для "sample-project" без изменения конфигурации по умолчанию в файле httpd.conf.
Directory "C:/Apache24/htdocs/sample-project">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
Directory>
Ответ 3
Будьте осторожны! Если он не работает даже после включения перезаписи модуля. Вам нужно изменить строку "AllowOverride None" на "AllowOverride All" в httpd.conf.
Поскольку @Alpha предупреждена, Laravel не нужно настраивать для этой цели.
Ответ 4
При изменении строки AllowOverride None
на AllowOverride All
в httpd.conf
убедитесь, что вы делаете ее внутри <directory ...>
, содержащей допустимый путь.
Пример
<Directory "/var/www/html"> #check path
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
Ответ 5
установите это в вашем.htaccess
DirectoryIndex index.php
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/index.php [L]
Ответ 6
По некоторым причинам приведенные выше ответы не работают для меня, поэтому вот единственный, который работал для меня.
Я использую ubuntu 18.04 amd64
качестве среды разработки сервера. Поэтому я изменил файл apache.conf
расположенный в /etc/apache2
От:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted
Для того, чтобы:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted
А также от:
<Directory /usr/share> AllowOverride None Require all granted
к
<Directory /usr/share> AllowOverride All Require all granted
После этого вам нужно перезапустить apache
с помощью команды sudo service apapche2 restart
в терминале
Теперь я могу получить доступ к странице, не используя index.php в URL
Автор кредита: joshymatheww @5 августа 2017 г., на канале обсуждения серверов Laracasts.