Как я могу удалить"public/index.php "в URL-адресе, сгенерированном laravel?
В основном мне нужно удалить index.php
или public/index.php
из сгенерированного URL-адреса в laravel, обычно путь localhost/public/index.php/someWordForRoute
, это должно быть что-то вроде localhost/someWordForRoute
Htacces (Хтаксы)
<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]
App/config/app.php
'url' => 'http://localhost',
Как я могу это изменить?
14 answers
Вариант 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".
Затем переместите все из общего каталога в корневую папку. Это должно привести к чему-то похожему на это:
После этого все, что нам нужно сделать, это отредактировать местоположения в файле 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';
Источник: Как удалить /общедоступный/из URL-адреса в Laravel
Я пробовал это на Laravel 4.2
Переименуйте server.php
в корневой папке вашего Laravel в index.php
и скопируйте файл .htaccess
из каталога /public
в корневую папку вашего Laravel.
Я надеюсь, что это сработает
ВОТ ПРОСТЫЕ ШАГИ, ЧТОБЫ УДАЛИТЬ PUBLIC В 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
Вот и все.
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]
Не путайте с другим вариантом фрагмент ниже, который я использую, и он также будет полезен для вас. Поместите приведенные ниже 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 и все, что связано с вашими конфигурациями Apache.
У вас есть доступ к конфигурации вашего сервера Apache? Если это так, проверьте это в документах:
Как правило, файлы .htaccess следует использовать только в том случае, если у вас нет доступа к файлу конфигурации основного сервера. Существует, например, распространенное заблуждение, что аутентификация пользователя всегда должна выполняться в файлы .htaccess, а в последние годы еще один неправильное представление о том, что директивы mod_rewrite должны входить в файлы.htaccess. Это просто не тот случай. Вы можете поместить конфигурации аутентификации пользователей в конфигурацию основного сервера, и это, по сути, предпочтительный способ сделать это. Аналогично, директивы mod_rewrite во многих отношениях лучше работают в конфигурации основного сервера.
... В целом, по возможности следует избегать использования файлов .htaccess . Любая конфигурация, которую вы хотели бы включить в файл .htaccess с таким же успехом можно создать в разделе вашего основного файла конфигурации сервера.
Источник: Документация Apache.
Причина, по которой я упоминаю об этом в первую очередь, заключается в том, что лучше всего полностью избавиться от .htaccess
, если вы можете, и использовать тег Directory
внутри тега VirtualHost
. Тем не менее, остальная часть этого будет предполагать, что вы придерживаетесь маршрута .htaccess
по какой-либо причине.
Чтобы разобраться в этом, пара вещей может быть происходит:
Я отмечаю, возможно, бессмысленно, что в вашем вопросе ваш файл называется
.htacces
. Я предполагаю, что это опечатка, но на тот случай, если вы ее упустили, и на самом деле просто не хватает второй буквы s, это именно та незначительная ошибка, которая заставила бы меня биться головой о стену в поисках чего-то более сложного.-
Ваш сервер не может разрешить
.htaccess
. Чтобы проверить это, перейдите в файл конфигурации Apache. В современном Apache сборки этого обычно нет в одном файле конфигурации, поэтому убедитесь, что вы используете тот, который указывает на ваше приложение, где бы оно ни существовало. ИзменениеAllowOverride none
До
AllowOverride all
В качестве продолжения документы Apache также рекомендуют в целях безопасности не делать этого для каждой папки, если вы собираетесь использовать
.htaccess
для перезаписи. Вместо этого сделайте это для папок, в которые вам нужно добавить.htaccess
. У вас включен
mod_rewrite
? Это может быть причиной проблем. Я замечаю тебя имейте тег вверху<IfModule mod_rewrite.c>
. Попробуйте прокомментировать эти теги и перезапустите Apache. Если вы получаете сообщение об ошибке, то это, вероятно, потому, что вам нужно включитьmod_rewrite
: Как включить mod_rewrite для Apache 2.2
Надеюсь, это поможет. Я назвал некоторые из наиболее распространенных проблем, но есть несколько других, которые могут быть более приземленными или уникальными. Еще одно предложение на сервере разработчиков? Переустановите Apache. Если возможно, сделайте это из другого источника с хорошим учебником.
Laravel уже поставляется с симпатичным URL.htaccess... вы должны быть хороши, чтобы выйти из коробки... http://laravel.com/docs/installation#pretty-urls
Убедитесь, что mod_rewrite включен и что ваш домашний путь установлен в общедоступный каталог вашего приложения.
Для Ларавеля 4 & 5:
- Переименовать server.php в вашей корневой папке Laravel, чтобы index.php
- Скопируйте файл .htaccess из каталога /public в корневую папку Laravel.
Вот и все!!:)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Используйте это в .htaccess и перезапустите сервер
Надеюсь, это поможет так же, как и мне.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Переименовать server.php в корневой папке вашего Laravel, чтобы index.php и скопируйте файл .htaccess из каталога /public в корневую папку Laravel. -- Вот и все!!:)
Я только что установил Laravel 5 для проекта, и в корневом каталоге есть файл с именем server.php
.
Измените его на index.php
, и он заработает или введите в терминале:
$cp server.php index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(public)/(index.php)/$ $1/$4 [L]
</IfModule>
В соответствии с Laravel 5.3 вышеуказанные вещи не будут работать должным образом, но, пожалуйста, будьте спокойны и выполните следующие действия:
Шаг 1. Перейдите внутрь проекта laravel
Шаг 2. Создайте один случайный каталог/папку, например. код laravel
Шаг 3. Переместите все папки и файлы (кроме общедоступной папки)
Шаг 4. Переместите все папки и файлы, которые находятся в общедоступной папке , в проект laravel
Шаг 5. Теперь внутри проекта laravel есть index.php файл, пожалуйста, откройте это и измените пути к папкам для начальной загрузки в соответствии с новым путем, как это было ранее "требуется РЕЖ.'/../bootstrap/autoload.php ';"теперь это станет "требовать РЕЖ"./laravelcode/bootstrap/autoload.php ';"
Вот и все, просто запустите свой URL-адрес без публичного и index.php как показано ниже http://localhost/blog/