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

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

Мне нужно удалить 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',

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

4b9b3361

Ответ 1

Вариант 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".

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

После этого все, что нам нужно сделать, это отредактировать местоположения в 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

Ответ 2

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

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

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

Ответ 3

ЗДЕСЬ ПРОСТЫЕ ШАГИ ДЛЯ УДАЛЕНИЯ 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

Вот и все.

Ответ 4

Не путайтесь с другим вариантом, который приведен ниже, и который будет вам полезен. Поместите ниже 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]

Ответ 5

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]

Ответ 6

Вероятно, это очень мало связано с 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. Если возможно, сделайте это из другого источника с хорошим учебником.

Ответ 7

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

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

Ответ 8

Для Laravel 4 и 5:

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

Это !! :)

Ответ 9

 RewriteEngine on

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

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

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

$cp server.php index.php

Ответ 13

Вы должны выполнить следующие шаги, чтобы сделать это, а именно:

  • Сопоставьте свой домен с общей папкой вашего проекта (например,/var/www/html/yourproject/public) (если вы используете linux)

  • Перейдите в общую папку и отредактируйте там свой файл .htaccess

AddHandler application/x-httpd-php72 .php
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect non-www to www
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Redirect non-http to https
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

    # Remove index.php
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
</IfModule>


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

Ответ 14

Также убедитесь, что Rewrite Engline включен после редактирования файла .htaccess.

sudo a2enmod rewrite

Ответ 15

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

Ответ 16

В соответствии с 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/