Мне нужно удалить 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',
Как я могу это изменить?
Если его там еще нет, создайте файл.htaccess в корневом каталоге Laravel. Создайте файл .htaccess
корневой директории Laravel, если он еще не существует. (Обычно он находится в вашей папке public_html
)
Отредактируйте файл.htaccess, чтобы он содержал следующий код:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Теперь вы сможете получить доступ к веб-сайту без части "/public/index.php/".
Создайте новую папку в корневом каталоге и переместите все файлы и папки, кроме общедоступных. Вы можете называть это как угодно. Я буду использовать "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';
Источник: Как удалить/public/из URL в Laravel
etc/apache2/apache2.conf
изменив его с AllowOverride None
на AllowOverride All
где вы видите конфигурацию каталога, <Directory /var/www/></Directory>
.
Я пробовал это на Laravel 4.2
Переименуйте server.php
в корневую папку Laravel на index.php
и скопируйте файл .htaccess
из каталога /public
в корневую папку Laravel.
Я надеюсь, что он работает
ЗДЕСЬ ПРОСТЫЕ ШАГИ ДЛЯ УДАЛЕНИЯ 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
Вот и все.
Не путайтесь с другим вариантом, который приведен ниже, и который будет вам полезен. Поместите ниже 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]
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]
Вероятно, это очень мало связано с 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. Если возможно, сделайте это из другого источника с хорошим учебником.
Для Laravel 4 и 5:
Вот оно!:)
Laravel отправляется с довольно-таки URL-адресом .htaccess... вы должны быть хорошими, чтобы выйти из коробки... http://laravel.com/docs/installation#pretty-urls
Убедитесь, что mod_rewrite включен и что ваш домашний путь установлен в общий каталог вашего приложения.
mod_rewrite
и скопировал код, который находится на этой странице и до сих пор не работает
Я только что установил Laravel 5 для проекта, и в корневом server.php
есть файл server.php
.
Измените его на index.php
и он будет работать или введите в терминале:
$cp server.php index.php
Переименуйте server.php в корневую папку Laravel на index.php и скопируйте файл .htaccess из/общедоступной папки в корневую папку Laravel. -- Это оно!!:)
Надеюсь, что это помогает, как и для меня.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
используйте это в .htaccess и перезапустите сервер
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(public)/(index.php)/$ $1/$4 [L]
</IfModule>
В соответствии с 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/
mod_rewrite
включен.