Ответ 1
Для Laravel 5:
- Переименуйте
server.php
в корневой папке Laravel вindex.php
- Скопируйте файл
.htaccess
из каталога/public
в корневую папку Laravel.
Это!
Я знаю, что это очень популярный вопрос, но я не смог найти работающее решение для 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" в среде разработки, которая:
Спасибо
** Я использую MAMP и PHP 5.6.2
server.php
в корневой папке Laravel в index.php
.htaccess
из каталога /public
в корневую папку Laravel.Это!
Я решил проблему, используя 2 ответа:
Изменение .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]
Если есть другие статические файлы, нужно просто добавить расширение в предыдущий объявленный список
В 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>
Простой способ удалить публику из laravel 5 url. Вам просто нужно вырезать index.php и .htaccess из публичного каталога и вставить его в корневой каталог, вот и все и замените две строки в index.php как
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
Примечание. Приведенный выше метод предназначен только для начинающих, так как они могут столкнуться с проблемой при настройке виртуального хоста. Лучшее решение - настроить виртуальный хост на локальном компьютере и указать его в общем каталоге проекта.
@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 и всем вам.
ВЫ НАСТОЯЩИМ НЕ ДОЛЖНЫ переименовывать server.php
в корневой папке Laravel в index.php
и скопируйте файл .htaccess
из каталога /public
в корневую папку Laravel !!!
Таким образом, каждый может получить доступ к некоторым вашим файлам (например, .env
). Попробуй сам. Вы этого не хотите!
Вместо этого вы должны создать файл .htaccess
в своем корне следующим образом:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
Это автоматически перезапишет все ваши базовые URI в папку /public
. Даже все заголовки, например HTTP-заголовок авторизации, и все необязательные параметры URI также будут автоматически передаваться в папку /public
.
Это все!
Просто создайте файл .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.
Если вы хотите сохранить код в подкаталоге, вы можете создать субдомен, тогда этот код также будет работать для этого.
1) Я не нашел рабочий метод для перемещения общедоступного каталога в L5. Хотя вы можете изменить некоторые вещи в загрузочном index.php
, похоже, что несколько вспомогательных функций основаны на предположении, что этот публичный каталог находится там. В общем, честно говоря, вы не должны перемещать общедоступный каталог.
2) Если вы используете MAMP, вы должны создавать новые vhosts для каждого проекта, каждый из которых обслуживает публичный каталог проектов. После создания вы получаете доступ к каждому проекту с помощью определенного вами имени сервера, например:
http://project1.dev
http://project2.dev
Вы должны указывать корневой каталог вашего хоста 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
.
Этот публичный каталог существует для того, чтобы сделать проект немного более безопасным. Решите актуальную проблему и не пытайтесь взломать это простое, но приятное дополнение к безопасности. :)
Можно удалить публичный 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';
И удалите весь кеш и куки.
Создайте файл .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>
Предположим, вы разместили все остальные файлы и каталоги в папке с именем 'locale'.
Просто перейдите в 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';
ЛУЧШИЙ ПОДХОД: я не буду рекомендовать удаление 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 будет защищен, потому что он на один уровень ниже вашего публичного каталога :)
Я просто переименовываю server.php
в index.php
и он работает
Это хорошо работает для всех версий Laravel...
Вот моя структура каталогов,
/laravel/
... app
... bootstrap
... public
... etc
Следуйте этим простым шагам
требуют DIR. '/../bootstrap/autoload.php';
в
требуют DIR. '/bootstrap/autoload.php';
а также
$ app = require_once DIR. '/../bootstrap/start.php';
в
$ app = require_once DIR. '/bootstrap/start.php';
'public' => DIR. '/../public',
в
'public' => DIR. '/..',
и что это, теперь попробуйте http://localhost/laravel/
Вот лучшее и самое короткое решение, которое работает для меня на май 2018 года для Laravel 5.5
просто вырежьте файл .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>
Просто сохраните файл .htaccess
и все.
Переименуйте ваш файл server.php
в index.php
. это все нравится!
Я хотел бы добавить к @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, '/');
}
Это позволит исправить скрипты, стили и пути к изображениям. Все для путей к ресурсам.
Чтобы пользователь XAMPP удалял публикацию из url, не касаясь файловой системы laravel по умолчанию, необходимо установить виртуальный хост для вашего приложения, чтобы сделать это. Jsut выполните следующие действия.
Откройте приложение панели управления XAMPP и остановите Apache. Имейте в виду, что поздние компьютеры Windows могут запускать его как службу, поэтому установите флажок слева от модуля Apache.
Перейдите в C: /xampp/apache/conf/extra
или где находятся файлы XAMPP.
Откройте файл с именем httpd-vhosts.conf с помощью текстового редактора.
Вокруг строки 19 найдите # NameVirtualHost *:80
и раскомментируйте или удалите хэш.
В самом низу файла вставьте следующий код:
<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>
<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>
C: /Windows/System32/drivers/etc/hosts
, где хосты - это файл. Откройте его с помощью блокнота. 127.0.0.1 localhost
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.
Оригинальную статью можно найти здесь
4 лучших способа удалить общедоступный URL.
Если вы использовали какой-либо другой трюк для удаления публики из URL, например, измените имя server.php на index.php и измените путь к файлу ядра. Очевидно, не делай этого. Тогда почему Laravel не дает такого решения, потому что это не самый правильный способ сделать это.
1) Удалить общедоступный URL-адрес с помощью htaccess в Laravel
Добавив файл .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>
2) Удалите публику, создав виртуальный хост в вашем локальном
Я даю демо здесь для операционной системы Windows. Но я постараюсь определить шаг, чтобы любой мог легко следовать за ним. Вы также можете изучить Google для того же для конкретной операционной системы.
Шаг 1: Перейдите в C:\Windows\system32\drivers\etc\и откройте файл "hosts" в режиме администратора.
Шаг 2: Добавьте следующий код к нему. Здесь я даю вам демонстрацию демо доменного имени projectname.local, вы можете указать любой, как вам нравится. Просто сделайте это постоянным в любом месте.
127.0.0.1 projectname.local
Шаг 3: Теперь перейдите к C:\xampp\apache\conf\extra
для пользователей xampp и для пользователя wamp "C:\wamp\bin\apache\Apache2.4.4\conf\extra"
и откройте файл "httpd-vhosts.conf"
. Теперь добавьте в него следующий код.
Примечания: Измените корневой каталог документа в соответствии с вашим проектом, а также добавьте имя домена, которое вы определили, в файл "hosts".
<VirtualHost projectname.local>
ServerAdmin projectname.local
DocumentRoot "C:/xampp/htdocs/projectdir"
ServerName projectname.local
ErrorLog "logs/projectname.local.log"
CustomLog "logs/projectname.local.log" common
</VirtualHost>
Шаг 4. Последний, но важный шаг - перезапустить Xampp или Wamp и получить доступ к URL-адресу, например, http://projectname.local
, и ваш Laravel ответит без общедоступного URL-адреса.
3) Удалить публику, запустив команду в Laravel
Если вы работаете в локальном режиме, вам не нужно ничего делать, просто нужно запустить следующую команду из вашего терминала или инструмента командной строки. После этого вы можете получить доступ к своему веб-сайту по указанному URL-адресу из командной строки.
> php artisan serve
Если вы хотите запустить свой проект на определенном IP-адресе, вам нужно выполнить следующую команду. Если вы работаете в локальной сети, то если вы хотите разрешить другим людям доступ к вашему веб-сайту с локального компьютера, вам просто нужно проверить свой IP-адрес с помощью командной строки, запустив "ipconfig" после получения IP-адреса, выполнив следующую команду.
> php artisan serve --host=192.168.0.177
Если вы хотите запустить свой проект на определенном IP-адресе с определенным портом, вам потребуется следующая команда.
> php artisan serve --host=192.168.0.177 --port=77
4) Удалить общедоступную версию на размещенном сервере или на cpanel
После завершения проекта вам нужно разместить проект на сервере, а затем просто установить корневой каталог документа на вашем домене в общую папку. Проверьте скриншот ниже.
Как показано на скриншоте, если у вас нет публичной папки проекта в public_html, вам просто нужно установить корневой каталог документа, как "public_html/public"
.
Всегда существует причина иметь общую папку в настройке Laravel, все общедоступные материалы должны присутствовать внутри общей папки,
Не указывайте свой IP-адрес/домен в корневую папку Laravel, но укажите его в общую папку. Небезопасно указывать сервер Ip на корневую папку., Потому что, если вы не введете ограничения в
.htaccess
, вы можете легко получить доступ к другим файлам.,
Просто напишите условие перезаписи в файле .htaccess
и установите модуль rewrite и включите модуль перезаписи, проблема, которая добавит общественности в маршрут, будет решена.
Я прочитал статью раньше, и она работает нормально, но на самом деле не знаю, безопасно или нет.
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';
Во-первых, вы можете использовать эти шаги
Для Laravel 5:
1. Переименуйте server.php в корневую папку Laravel на index.php
2. Скопируйте файл.htaccess из/общедоступной папки в корневую папку Laravel.
источник: fooobar.com/questions/51696/...
после того, как вы выполните эти шаги, вам нужно изменить все пути css и script, но это будет утомительно.
Предложение решения: просто вы можете внести незначительные изменения в функцию helpers::asset
.
Для этого:
открытый vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
goto line 130
напишите "public/".$path
вместо $path
,
function asset($path, $secure = null){
return app('url')->asset("public/".$path, $secure);
}
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteRule ^(.*)$ public/$1 [L]
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# 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]
</IfModule>
Активируйте модуль mod_rewrite с помощью
sudo a2enmod rewrite
и перезапустите апач
sudo service apache2 restart
Чтобы использовать mod_rewrite из файлов .htaccess (что является очень распространенным случаем), отредактируйте VirtualHost по умолчанию с
sudo nano /etc/apache2/sites-available/000-default.conf
Ниже "DocumentRoot/var/www/html" добавьте следующие строки:
<Directory "/var/www/html">
AllowOverride All
</Directory>
Перезагрузите сервер снова:
sudo service apache2 restart
Другим методом, который я использую, является создание символической ссылки (в Linux, не знаю о Win) с помощью команды ln в htdocs или www i.e. ln projectname/public project
Таким образом, сайт доступен через localhost/project
Даже если я не рекомендую помещать 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>
Это было быстрое решение, которое я должен был сделать, чтобы любой человек мог его обновить.
После установки Laravel в первый раз я столкнулся с известной проблемой "общих папок", и я придумал это решение, которое, по моему личному мнению, является "более чистым", чем другие, которые я нашел в Интернете.
public
слово в URI.env
от любопытных людей Все может быть сделано только для редактирования .htaccess
с помощью mod_rewrite
и четырех простых правил.
.htaccess
в public/.htaccess
в основной корень Я прокомментировал все, поэтому должно быть ясно (я надеюсь) также тем, кто никогда не использовал 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, и его ответ должен быть принят. Просто одно, простое и четкое правило, которое перенаправляет весь трафик в общую папку без изменения какого-либо файла.
Проблема в том, что если вы введете /public, и он все еще будет доступен в URL, для этого я создал исправление, которое должно быть помещено в public/index.php
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
if(stristr($uri, '/public/') == TRUE) {
if(file_exists(__DIR__.'/public'.$uri)){
}else{
$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$actual_link = str_replace('public/', '',$actual_link);
header("HTTP/1.0 404 Not Found");
header("Location: ".$actual_link."");
exit();
return false;
}}
этот кодекс удалит public из url, даст 404, а затем перенаправит на url без public
Вы можете выполнить только 2 шага:
.htaccess
из public
папки и вставить в корень (основная папка)server.php
в index.php
в корневом каталоге. (основная папка) Шаг 1: файл server.php
в корневом каталоге переименуйте в index.php
Шаг 2: скопируйте файл .htaccess
из /public
каталога в корневой каталог
Вы можете удалить публичное ключевое слово из 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>
Вы можете получить больше ссылок здесь.
Для Laravel 5.8:
=> Переименуйте server.php в корневой папке Laravel в index.php
=> Скопируйте файл .htaccess из папки /public и вставьте его в корневой каталог Laravel.
Но я предлагаю вам не делать этого, так как это делает ваш проект уязвимым, вместо этого вы должны указать свой домен в общую папку
Спасибо
добавьте файл .htaccess в корневую папку, вставьте следующий код и замените ваше доменное имя собственным доменным именем
.ПереписатьEngine на RewriteCond% {HTTP_HOST} ^ (www.)? Yourdomainname $ RewriteCond% {REQUEST_URI}! ^/Public/
RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d
RewriteRule ^ (. *) $/Public/$ 1
RewriteCond% {HTTP_HOST} ^ (www.)? Yourdomainname $ RewriteRule ^ (/)? $/Public/index.php [L]