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

Маршруты не работают без 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>
4b9b3361

Ответ 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.