Как я могу удалить «public / index.php» в URL, созданном Laravel?

73

Мне нужно удалить index.php или public/index.php из сгенерированного URL в Laravel; обычно путь - это localhost/public/index.php/someWordForRoute, это должно быть что-то вроде localhost/someWordForRoute.

.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]

приложение /Config/app.php

'url' => 'http://localhost',

Как я могу это изменить?

  • 7
    Красивые URL в Laravel . Убедитесь, что mod_rewrite включен.
  • 1
    stackoverflow.com/questions/21662378/...
Показать ещё 5 комментариев
Теги:
.htaccess
laravel-4
laravel-routing

14 ответов

111
Лучший ответ

Вариант 1: использовать.htaccess

Если его там еще нет, создайте файл.htaccess в корневом каталоге Laravel. Создайте файл .htaccess корневой директории Laravel, если он еще не существует. (Обычно он находится в вашей папке public_html)

Отредактируйте файл.htaccess, чтобы он содержал следующий код:

<IfModule mod_rewrite.c>
   RewriteEngine On 
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Теперь вы сможете получить доступ к веб-сайту без части "/public/index.php/".

Вариант 2. Переместите вещи из каталога "/public" в корневой каталог.

Создайте новую папку в корневом каталоге и переместите все файлы и папки, кроме общедоступных. Вы можете называть это как угодно. Я буду использовать "laravel_code".

Затем переместите все из общедоступного каталога в корневую папку. Это должно привести к чему-то похожему на это: Изображение 3561

После этого все, что нам нужно сделать, это отредактировать местоположения в laravel_code/bootstrap/paths.php файле index.php.

В laravel_code/bootstrap/paths.php найдите следующую строку кода:

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public',

И измените их на:

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../',

В index.php найдите эти строки:

require __DIR__.'/../bootstrap/autoload.php';     
$app = require_once __DIR__.'/../bootstrap/start.php';

И измените их на:

require __DIR__.'/laravel_code/bootstrap/autoload.php';     
$app = require_once __DIR__.'/laravel_code/bootstrap/start.php';

Источник: Как удалить/public/из URL в Laravel

  • 4
    Если вы используете Debian Linux, не забудьте отредактировать etc/apache2/apache2.conf изменив его с AllowOverride None на AllowOverride All где вы видите конфигурацию каталога, <Directory /var/www/></Directory> .
  • 1
    Мне нужно было только иметь файл .htaccess в моем корневом каталоге, чтобы он заработал.
Показать ещё 7 комментариев
38

Я пробовал это на Laravel 4.2

Переименуйте server.php в корневую папку Laravel на index.php и скопируйте файл .htaccess из каталога /public в корневую папку Laravel.

Я надеюсь, что он работает

  • 1
    Если принятый Луазаном ответ не сработает, этого будет достаточно. Хотя я бы обязательно отредактировал файл index.php в общедоступной папке, чтобы перенаправить пользователей из общего доступа, если они сразу перейдут по этой ссылке.
  • 4
    Файлы js и css больше не загружаются из общей папки
Показать ещё 3 комментария
12

ЗДЕСЬ ПРОСТЫЕ ШАГИ ДЛЯ УДАЛЕНИЯ PUBLIC IN URL (Laravel 5)

1: скопировать все файлы в общую папку и пропустить их в корневой папке laravel

2: Откройте index.php и измените

С

 require __DIR__.'/../bootstrap/autoload.php';

Для

 require __DIR__.'/bootstrap/autoload.php';

И

$app = require_once __DIR__.'/../bootstrap/app.php';

Для

$app = require_once __DIR__.'/bootstrap/app.php';

В laravel 4 путь 2 равен $app = require_once __DIR__.'/bootstrap/start.php'; вместо $app = require_once __DIR__.'/bootstrap/app.php';/app.php

Вот и все.

  • 0
    Есть ли какие-либо другие сложности, связанные с другими ссылками с сайта?
  • 0
    Это выглядит как отличное решение и просто. Но на самом деле, как сказал Харинг10. Есть ли проблемы с этим?
Показать ещё 1 комментарий
10

Не путайтесь с другим вариантом, который приведен ниже, и который будет вам полезен. Поместите ниже htacces в свой корень.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    public/    [L]
    RewriteRule    (.*) public/$1    [L]
</IfModule>

Перейдите в общедоступный каталог и поместите другой файл htaccess с фрагментом кода ниже.

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

</IfModule>

Работает... !!!

Laravel использует ниже.htaccess

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
  • 0
    Отлично: можете ли вы сказать мне, каковы плюсы и минусы этого метода?
10

1) Проверьте, включен ли mod_rewrite. Перейдите в каталог /etc/apache2/mods-enabled и посмотрите, доступен ли rewrite.load. Если нет, включите его, используя команду sudo a2enmod rewrite. Он включит модуль перезаписи. Если он уже включен, он покажет сообщение Module rewrite already enabled.
2) Создайте виртуальный хост для общего каталога, чтобы вместо предоставления http://localhost/public/index.php мы могли бы использовать как http://example.com/index.php. [поэтому имя общей папки будет закрыто]
3) Затем создайте .htaccess, который скроет index.php из вашего url, который будет находиться внутри корневого каталога (общая папка)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
  • 1
    Пробовал свои шаги. Пока нет результата! Я не знаю, почему это происходит!
  • 0
    Дайте информацию журнала, чтобы мы могли проследить основную причину
Показать ещё 3 комментария
4

Вероятно, это очень мало связано с Laravel и все, что связано с вашими конфигурациями Apache.

У вас есть доступ к вашей конфигурации сервера Apache? Если это так, проверьте это из документов:

В общем, вы должны использовать только файлы .htaccess, если у вас нет доступ к файлу конфигурации основного сервера. Существует, например, распространенное заблуждение, что аутентификация пользователя всегда должна выполняться в .htaccess и, в последние годы, другое заблуждение, что Директивы mod_rewrite должны входить в файлы .htaccess. Это просто не случай. Вы можете установить конфигурации аутентификации пользователя в главном конфигурации сервера, и это, по сути, предпочтительный способ сделать вещи. Аналогично, директивы mod_rewrite работают лучше, во многих в конфигурации основного сервера.

... В общем случае следует избегать использования файлов .htaccess, если возможное. Любая конфигурация, которую вы считаете .htaccess, можно так же эффективно сделать в в файле конфигурации основного сервера.

Источник: Документация Apache.

Причина, по которой я упоминаю это в первую очередь, состоит в том, что лучше всего избавиться от .htaccess, если можно, и использовать тег Directory внутри тега VirtualHost. При этом остальная часть будет предполагать, что вы придерживаетесь маршрута .htaccess по любой причине.

Чтобы сломать это, может произойти пара вещей:

  • Я отмечаю, что, возможно, бессмысленно, что ваш файл имеет имя .htacces в вашем вопросе. Я предполагаю, что это опечатка, но с учетом того, что вы ее не заметили, и на самом деле это просто не хватает второго с, это в точности такая незначительная ошибка, которая оставила бы меня стучать головой о стену, ища что-то более сложное.

  • Ваш сервер не может разрешать .htaccess. Чтобы проверить это, перейдите в конфигурационный файл Apache. В современных сборках Apache это обычно не в одном файле конфигурации, поэтому убедитесь, что вы используете тот, который указывает на ваше приложение, где бы он ни существовал. Изменение

    AllowOverride none
    

    к

    AllowOverride all
    

    В качестве последующих действий документы Apache также рекомендуют, чтобы в целях безопасности вы не делали этого для каждой папки, если собираетесь переходить на .htaccess для перезаписи. Вместо этого сделайте это для папок, которые нужно добавить .htaccess в.

  • У вас есть mod_rewrite включен? Это может вызвать проблемы. Я заметил, что у вас есть тег вверху <IfModule mod_rewrite.c>. Попробуйте прокомментировать эти теги и перезапустите Apache. Если вы получите сообщение об ошибке, возможно, это связано с тем, что вам нужно включить mod_rewrite: Как включить mod_rewrite для Apache 2.2

Надеюсь, это поможет. Я назвал некоторые из наиболее распространенных проблем, но есть несколько других, которые могут быть более мирскими или уникальными. Еще одно предложение на dev-сервере? Переустановите Apache. Если возможно, сделайте это из другого источника с хорошим учебником.

  • 0
    AllowOverride у меня все работает!
  • 0
    Отличный улов для настроек конфигурации apache2, я пропускаю этот параметр каждый раз.
1

Для Laravel 4 и 5:

  • Переименуйте server.php в корневую папку Laravel на index.php
  • Скопируйте файл .htaccess из/общедоступной папки в корневую папку Laravel.

Вот оно!:)

1

Laravel отправляется с довольно-таки URL-адресом .htaccess... вы должны быть хорошими, чтобы выйти из коробки... http://laravel.com/docs/installation#pretty-urls

Убедитесь, что mod_rewrite включен и что ваш домашний путь установлен в общий каталог вашего приложения.

  • 0
    Я активировал mod_rewrite и скопировал код, который находится на этой странице и до сих пор не работает
  • 1
    Убедитесь, что в Apache ваш путь к общедоступной папке вашего приложения.
Показать ещё 3 комментария
0

Я только что установил Laravel 5 для проекта, и в корневом server.php есть файл server.php.

Измените его на index.php и он будет работать или введите в терминале:

$cp server.php index.php
0

Переименуйте server.php в корневую папку Laravel на index.php и скопируйте файл .htaccess из/общедоступной папки в корневую папку Laravel. -- Это оно!!:)

0

Надеюсь, что это помогает, как и для меня.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
0
 RewriteEngine on

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d

 RewriteRule ^(.*)$ index.php/$1 [L]

используйте это в .htaccess и перезапустите сервер

-2
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(public)/(index.php)/$ $1/$4 [L]
</IfModule>
  • 3
    Предоставить более подробное объяснение вашего решения
-3

В соответствии с Laravel 5.3 вышеуказанные вещи не будут работать должным образом, но, пожалуйста, будьте спокойны и выполните следующие шаги:

Шаг 1. Перейдите в проект laravel
Шаг 2. Сделайте один случайный каталог/папку, например. laravelcode
Шаг 3. Переместите всю папку и файлы (кроме общедоступной)
Шаг 4. Переместите всю папку и файлы, находящиеся в папке общедоступной, в проект laravel

Шаг 5. Теперь в проекте laravel есть файл index.php, пожалуйста, откройте это и измените пути к папке для начальной загрузки в соответствии с новым путем, как ранее "require DIR." /../bootstrap/autoload.php ";" теперь он станет "требовать DIR. '/laravelcode/bootstrap/autoload.php';"

Чтобы он просто запускал ваш url без public и index.php, как показано ниже http://localhost/blog/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню