Laravel 5 - Удалить Публичную из URL

171

Я знаю, что это очень популярный вопрос, но я не смог найти работающее решение для Laravel 5. Я пытался перенести из Codeigniter в течение длительного времени, но этот запутанный процесс установки не дает мне отключиться.

Я не хочу запускать виртуальную машину, это просто неудобно при переключении между проектами.

Я не хочу, чтобы мой корень документа был в общей папке, это также неудобно при переключении между проектами.

Я пробовал метод .htaccess mod_rewrite

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

Это просто дает мне Laravel NotFoundHttpException в файле compiled.php 7610.

Когда я пытался L4 некоторое время назад, я использовал метод перемещения содержимого общей папки в корневой каталог. Структура L5 совсем другая, и после тех же шагов полностью сломался Laravel (сервер вернул бы только пустую страницу).

Есть ли достойный способ удаления "public" в среде разработки, которая:

  • Работает с L5
  • Позволяет мне легко переключаться между проектами (я обычно работаю на 2 или 3 в любой момент времени).

Спасибо

** Я использую MAMP и PHP 5.6.2

  • 1
    Структура папок в руководстве отличается от моей, я думаю, он не использует L5? Я пропустил изменения, которые он сделал в файле Bootstrap / Paths, потому что он не существует. Похоже, проект работает. Как вы думаете, это нормально?
  • 0
    моя ошибка позволила мне добавить ответ для L5
Показать ещё 7 комментариев
Теги:
.htaccess
laravel-5
mamp

26 ответов

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

Для Laravel 5:

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

Это!

  • 87
    что это может быть небезопасно, убедитесь, что никто не может запросить ваш файл .env если вы делаете это, если вы не в порядке с людьми, просматривающими пароль вашей базы данных в виде открытого текста;)
  • 39
    Это не будет работать, если вы ссылаетесь на свои активы, используя относительный путь от root, т.е. "/assets/styles.css" и так далее. Я все еще пытаюсь найти лучший способ развернуть его на серверах.
Показать ещё 16 комментариев
108

Я решил проблему, используя 2 ответа:

  • Переименование server.php на index.php(без изменений)
  • Скопируйте файл .htaccess из общей папки в корневую папку (например, rimon.ekjon).
  • Изменение .htaccess для статистики:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
    

    Если есть другие статические файлы, нужно просто добавить расширение в предыдущий объявленный список

  • 1
    привет @KA_lin. Как мне запретить кому-то просматривать .env как у localhost / oap / .env
  • 7
    Хммм ... попробуйте RewriteRule ^.env - [F,L,NC]
Показать ещё 8 комментариев
44

Простой способ удалить публикацию из larvel 5 url. Вам просто нужно обрезать index.php и .htaccess из общего каталога и вставить его в корневой каталог, вот и все и замените две строки в index.php как

require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
  • 1
    После этого css не загружается, bcoz все css находятся в публичном доступе, и публичный удален из URL
  • 1
    Вы можете поместить "public /" перед файлами js или css во время загрузки, например, Html :: script ("public / js / ....."); - Но лучшим решением будет виртуальный хост ...
41

В Laravel 5.5 создайте файл.htacess в корневом каталоге и поместите следующий код: - Ссылка Ссылка

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>
  • 0
    это работает отлично, но как насчет администратора?
  • 1
    лучший ответ! только один работал в моем примере, он должен иметь определенно больше голосов
Показать ещё 5 комментариев
34

@rimon.ekjon сказал:

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

Это работает для меня. Но все файлы ресурсов в/общедоступном каталоге не смогли найти и запросить URL-адреса, которые не работали, потому что я использовал помощник asset().

Я изменил функцию /Illuminate/Foundation/helpers.php/asset() следующим образом:

function asset($path, $secure = null)
{
    return app('url')->asset("public/".$path, $secure);
}

Теперь все работает:)

Спасибо @rimon.ekjon и всем вам.

  • 2
    Это не хороший способ решить эту проблему, так как вы пытаетесь обновить в каталоге поставщиков, что не является хорошей практикой.
  • 1
    вам нужно только добавить RewriteRule ^(.*)$ public/$1 [L] в ваш файл .htaccess, который вы скопировали из общедоступного каталога, удалив эту строку RewriteRule ^(.*)/$ /$1 [L,R=301]
24

1) Я не нашел рабочий метод для перемещения общедоступного каталога в L5. Хотя вы можете изменить некоторые вещи в загрузочном index.php, похоже, что несколько вспомогательных функций основаны на предположении, что этот публичный каталог находится там. В общем, честно говоря, вы не должны перемещать общедоступный каталог.

2) Если вы используете MAMP, вы должны создавать новые vhosts для каждого проекта, каждый из которых обслуживает публичный каталог проектов. После создания вы получаете доступ к каждому проекту с помощью определенного вами имени сервера, например:

http://project1.dev
http://project2.dev
19

Просто создайте файл .htaccess у root и добавьте в него эти строки

<IfModule mod_rewrite.c>
    RewriteEngine On

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

Это!

Вышеупомянутый код работает с корневой папкой public_html. Сказав, что ваш основной файл laravel должен находиться внутри папки public_html, если ваш каталог выглядит как public_html/laravelapp/public, и если вы поместите вышеуказанный код в laravelapp, это не сработает. Поэтому вы должны скопировать все ваши основные файлы в public_html и поместить там файл.htaccess.

Если вы хотите сохранить код в подкаталоге, вы можете создать субдомен, тогда этот код также будет работать для этого.

  • 0
    Я ответил ниже, прежде чем читать ваш ответ, и это должен быть принятый ответ. Нет изменений файла: просто простое, умное правило.
  • 0
    @ Рахам, какой у тебя сейчас URL?
Показать ещё 2 комментария
12

Даже если решения, упомянутые в этой теме, работают для вас, ребята, я бы попросил вас не делать этого. Вот причина, почему.

Вы должны указывать корневой каталог вашего хоста Apache на каталог $LARAVEL_PATH/public вместо $LARAVEL_PATH.

Смысл в наличии подкаталога для www host root вместо root проекта состоит в том, что вы не пропускаете файлы проекта через веб-сервер.

Даже если все файлы PHP имеют суффикс файла .php, злоумышленник может получить доступ к вашему $LARAVEL_PATH/storage и его содержимому подкаталога, прочитать ваш composer.json или package.json чтобы найти уязвимые зависимости, или прочитать файл .env и т.д.

Если вы работаете на виртуальном хостинге и у вас есть обязательный public_html, попробуйте установить Laravel вне этого каталога public_html и либо удалить public_html (если он пуст), и заменить его символической $LARAVEL_PATH/public на $LARAVEL_PATH/public ИЛИ, если вы хотите, чтобы экземпляр Laravel был подкаталогом. из public_html, сделайте то же самое, но создайте символическую ссылку из $LARAVEL_PATH/public в public_html/$PROJECT_SUBDIR.

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

  • 2
    Я принимаю ваш ответ, потому что это безопасно для папки хранения. Можете ли вы объяснить, как разместить приложение laravel на виртуальном хостинге?
  • 1
    Это действительно должен быть принятый ответ.
12

Можно удалить публичный URL в laravel5. Следуй этим шагам:

шаг 1. скопируйте все файлы из публичного и вставьте в корневой каталог

шаг 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';

И удалите весь кеш и куки.

  • 0
    Привет, я попробовал ваш метод, выполнил описанные выше шаги, но он показывает следующие ошибки: Предупреждение: require_once (D: \ Projects \ laravel / public / index.php): не удалось открыть поток: Нет такого файла или каталога в D: \ Projects \ laravel \ server.php в строке 21 Неустранимая ошибка: require_once (): Не удалось открыть обязательное 'D: \ Projects \ laravel / public / index.php' (include_path = '.; C: \ xampp \ php \ PEAR' ) в D: \ Projects \ laravel \ server.php в строке 21
11

Предположим, вы разместили все остальные файлы и каталоги в папке с именем 'locale'.

Изображение 3548

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

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

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

и измените их на следующее:

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

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

ЛУЧШИЙ ПОДХОД: я не буду рекомендовать удаление public, вместо этого on local computer create a virtual host point to public directory а on remote hosting change public to public_html and point your domain to this directory. Причина в том, что весь ваш код laravel будет защищен, потому что он на один уровень ниже вашего публичного каталога :)

МЕТОД 1:

Я просто переименовываю server.php в index.php и он работает

МЕТОД 2:

Это хорошо работает для всех версий Laravel...

Вот моя структура каталогов,

/laravel/
... app
... bootstrap
... public
... etc

Следуйте этим простым шагам

  1. переместить все файлы из публичного каталога в корень /laravel/
  2. Теперь нет необходимости в общедоступном каталоге, поэтому при желании вы можете удалить его сейчас
  3. Теперь откройте index.php и сделайте следующие замены

требуют DIR. '/../bootstrap/autoload.php';

в

требуют DIR. '/bootstrap/autoload.php';

а также

$ app = require_once DIR. '/../bootstrap/start.php';

в

$ app = require_once DIR. '/bootstrap/start.php';

  1. Теперь откройте bootstrap/paths.php и измените путь к общедоступному каталогу:

'public' => DIR. '/../public',

в

'public' => DIR. '/..',

и что это, теперь попробуйте http://localhost/laravel/

  • 0
    Это нормально для всего. но команда ремесленника не работает, просто она показывает "Не удалось открыть входной файл: ремесленник". Есть ли какие-либо предложения?
  • 0
    Спасибо wasim a, метод 2 работает для меня
Показать ещё 1 комментарий
6

Я хотел бы добавить к @Humble Learner и отметить, что правильное местоположение для "исправления" URL-адреса для ресурсов - это /Illuminate/Routing/UrlGenerator.php/asset().

Обновить метод для соответствия:

public function asset($path, $secure = null)
{
    if ($this->isValidUrl($path)) return $path;
    $root = $this->getRootUrl($this->getScheme($secure));
    return $this->removeIndex($root).'/public/'.trim($path, '/');
}

Это позволит исправить скрипты, стили и пути к изображениям. Все для путей к ресурсам.

4

Вот лучшее и самое короткое решение, которое работает для меня на май 2018 года для Laravel 5.5

1- просто обрежьте ваш файл .htaccess из каталога /public в корневой каталог и замените его содержимое следующим кодом:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]

</IfModule>

2- Просто сохраните файл .htaccess и все.

3- Переименуйте ваш файл server.php в index.php. это все нравится!

4

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

Не указывайте свой IP-адрес/домен в корневую папку Laravel, но укажите его в общую папку. Небезопасно указывать сервер Ip на корневую папку., Потому что, если вы не введете ограничения в .htaccess, вы можете легко получить доступ к другим файлам.,

Просто напишите условие перезаписи в файле .htaccess и установите модуль rewrite и включите модуль перезаписи, проблема, которая добавит общественности в маршрут, будет решена.

4

Чтобы пользователь XAMPP удалял публикацию из url, не касаясь файловой системы laravel по умолчанию, необходимо установить виртуальный хост для вашего приложения, чтобы сделать это. Jsut выполните следующие действия.

  1. Откройте приложение панели управления XAMPP и остановите Apache. Имейте в виду, что поздние компьютеры Windows могут запускать его как службу, поэтому установите флажок слева от модуля Apache.

  2. Перейдите в C: /xampp/apache/conf/extra или где находятся файлы XAMPP.

  3. Откройте файл с именем httpd-vhosts.conf с помощью текстового редактора.

  4. Вокруг строки 19 найдите # NameVirtualHost *:80 и раскомментируйте или удалите хэш.

  5. В самом низу файла вставьте следующий код:

<VirtualHost *>
    ServerAdmin [email protected]
    DocumentRoot "C:/xampp/htdocs" # change this line with your htdocs folder
    ServerName localhost
    ServerAlias localhost
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks Includes ExecCGI
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. Теперь вы можете скопировать и вставить код выше, чтобы добавить каталоги виртуального хоста. Например, Im работает на сайте под названием Eatery Engine, поэтому следующий фрагмент позволит мне работать с поддоменами на моей локальной установке:
<VirtualHost eateryengine.dev>
    ServerAdmin [email protected]
    DocumentRoot "C:/xampp/htdocs/eateryengine" # change this line with your htdocs folder
    ServerName eateryengine.dev
    ServerAlias eateryengine.dev
    <Directory "C:/xampp/htdocs/eateryengine">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. Затем перейдите к файлу хоста Windows, чтобы изменить ваши HOSTS. файл будет расположен на C: /Windows/System32/drivers/etc/hosts, где хосты - это файл. Откройте его с помощью блокнота.
  2. Поиск разрешения #localhost обрабатывается в самом DNS.

127.0.0.1 localhost

Разрешение имени локального хоста обрабатывается в самом DNS.

127.0.0.1       localhost
127.0.0.1       eateryengine.dev #change to match your Virtual Host.
127.0.0.1       demo.eateryengine.dev #manually add new sub-domains.
  1. Перезапустите Apache и проверьте все.

Оригинальную статью можно найти здесь

2

Не рекомендуется:

Вы действительно не должны переименовывать server.php в корневой папке Laravel в index.php и копировать файл.htaccess из /public в вашу корневую папку Laravel!

Таким образом, каждый может получить доступ к некоторым вашим файлам (например,.env). Вы этого не хотите!


Делать:

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

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

Это.

  • 1
    это работает для меня. Спасибо брат. ты спас мой день
  • 1
    Лучше всего он работал с Lumen на сервере Apache.
2

Во-первых, вы можете использовать эти шаги

Для Laravel 5:

1. Переименуйте server.php в корневую папку Laravel на index.php

2. Скопируйте файл.htaccess из/общедоступной папки в корневую папку Laravel.

источник: https://stackoverflow.com/questions/28364496/laravel-5-remove-public-from-url

после того, как вы выполните эти шаги, вам нужно изменить все пути css и script, но это будет утомительно.

Предложение решения: просто вы можете внести незначительные изменения в функцию helpers::asset.

Для этого:

  1. открытый vendor\laravel\framework\src\Illuminate\Foundation\helpers.php

  2. goto line 130

  3. напишите "public/".$path вместо $path,

    function asset($path, $secure = null){
       return app('url')->asset("public/".$path, $secure);
    }
    
  • 1
    Правило № 1: Никогда не редактируйте основной файл. Даже если это выглядит легко и приятно сейчас, вы заплатите позже.
  • 0
    @JanakaDombawela я так не думаю, потому что:
Показать ещё 1 комментарий
1

Laravel 5.5

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


достижения

  • Не public слово в URI
  • Защитите файл .env от любопытных людей

Все может быть сделано только для редактирования .htaccess с помощью mod_rewrite и четырех простых правил.


меры

  1. Перенесите файл .htaccess в public/.htaccess в основной корень
  2. Отредактируйте его как ниже

Я прокомментировал все, поэтому должно быть ясно (я надеюсь) также тем, кто никогда не использовал mod_rewrite (не то, что я эксперт, все наоборот). Кроме того, чтобы понять правила, должно быть ясно, что в Laravel, если Билл подключается к https://example.com, загружается https://example.com/index.php. Этот файл содержит только header("refresh: 5; https://example.com/public/") команды header("refresh: 5; https://example.com/public/"), который отправляет запрос на https://example.com/public/index.php. Этот второй index.php отвечает за загрузку контроллера и других вещей.

# IfModule prevents the server error if the app is moved in an environment which doesnt support mod_rewrite
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # RULES ORIGINALLY IN public/.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]

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

    # PERSONAL RULES ---
    # All the requests on port 80 are redirected on HTTPS
    RewriteCond %{SERVER_PORT} ^80$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

    # When .env file is requested, server redirects to 404
    RewriteRule ^\.env$ - [R=404,L,NC]

    # If the REQUEST_URI is empty (means: http://example.com), it loads /public/index.php
    # N.B.: REQUEST_URI is *never* actually empty, it contains a slash that must be set as match as below
    # .* means: anything can go here at least 0 times (= accepts any sequence of characters, including an empty string)
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule ^(.*) /public/index.php [L]

    # If the current request is asking for a REQUEST_FILENAME that:
    # a) !== existent directory
    # b) !== existent file
    # => if URI !== css||js||images/whatever => server loads /public/index.php, which is responsible to load the app and the related controller
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^(css|js|images|media)/(.*)$ /public/index.php [L,NC]

    # If the current request is asking for a REQUEST_FILENAME that:
    # a) !== existent directory
    # b) !== existent file
    # => if URI == css||js||images[=$1]/whatever[=$2] => server loads the resource at public/$1/$2
    # If R flag is added, the server not only loads the resource at public/$1/$2 but redirects to it
    # e.g.: bamboo.jpg resides in example.com/public/media/bamboo.jpg
    #       Client asks for example.com/media/bamboo.jpg
    #       Without R flag: the URI remains example.com/media/bamboo.jpg and loads the image
    #       With R flag: the server redirects the client to example.com/public/media/bamboo.jpg and loads the image
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(css|js|images|media)/(.*)$ /public/$1/$2 [L,NC]
    # --- END

</IfModule>

Следующее правило (изначально public/.htaccess) может быть удалено. Это же правило, по сути, более подробно объясняется в двух последних правилах.

# Handle Front Controller...
#    RewriteCond %{REQUEST_FILENAME} !-d
#    RewriteCond %{REQUEST_FILENAME} !-f
#    RewriteRule ^ index.php [L]

EDIT: Я пропустил решение Abhinav Saraswat, и его ответ должен быть принят. Просто одно, простое и четкое правило, которое перенаправляет весь трафик в общую папку без изменения какого-либо файла.

1

Даже если я не рекомендую помещать Laravel в корневую папку, есть случаи, когда этого избежать нельзя; для тех случаев вышеуказанные методы не работают для активов, поэтому я быстро исправил изменение htaccess: после копирования server.php на index.php отредактируйте файл .htaccess следующим образом:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    ### fix file rewrites on root path ###
    #select file url
    RewriteCond %{REQUEST_URI} ^(.*)$
    #if file exists in /public/<filename>
    RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
    #redirect to /public/<filename>
    RewriteRule ^(.*)$ public/$1 [L]
    ###############

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

    # Handle Front Controller...

    #RewriteCond %{REQUEST_FILENAME} -d # comment this rules or the user will read non-public file and folders!
    #RewriteCond %{REQUEST_FILENAME} -f #
    RewriteRule ^ index.php [L]
</IfModule>

Это было быстрое решение, которое я должен был сделать, чтобы любой человек мог его обновить.

1

Я прочитал статью раньше, и она работает нормально, но на самом деле не знаю, безопасно или нет.

    a. Create new folder local.
    b. Move all project into the local folder expect public folder.
    c. Move all the content of public folder to project root.
    d. Delete the blank public folder
    f. Edit the index file. 

Отредактируйте index.php

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

к

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

Другим методом, который я использую, является создание символической ссылки (в Linux, не знаю о Win) с помощью команды ln в htdocs или www i.e. ln projectname/public project Таким образом, сайт доступен через localhost/project

0
##Create .htaccess file in root directory and place code something like below.

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>
0

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

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

<IfModule php7_module>
   php_flag display_errors Off
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit -1
   php_value post_max_size 8M
   php_value session.gc_maxlifetime 1440
   php_value session.save_path "/var/cpanel/php/sessions/ea-php71"
   php_value upload_max_filesize 2M
   php_flag zlib.output_compression Off
</IfModule>
0

Вы можете удалить публичное ключевое слово из URL, используя различные методы.

1) Если вы используете выделенный хостинг и у вас есть root-доступ, вы можете удалить публичное ключевое слово из URL, используя Virtual Host. Вы должны указать путь к DocumentRoot с помощью public. Так что это запустит индекс из публичного каталога и удалит его из URL.

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html/{yoursourcedirectory}/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

2) Если у вас нет корневого доступа к вашему хостингу, вам следует создать новый файл .htaccess в корневой директории и поместить код, как показано ниже.

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>

Вы можете получить больше ссылок здесь.

0

Шаг 1: файл server.php в корневой директории переименовывается как index.php

шаг 2:

скопировать файл.htaccess из общего каталога в root direct

  • 0
    server.php не находится в общей папке. Это уже в корне, вы просто должны переименовать его.
  • 0
    @MuhammadWajahatAnwar ты прав. я исправляю это
0
 You can follow only 2 step


 1- cut .htaccess from public folder and paste to root(mainFolder)  
 2- Rename server.php file to index.php AT your root dir. (mainFolder) 

Ещё вопросы

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