Как удалить public/index.php/ из URL в Codeigniter 4

Мне нужен обычный URL, например http://www.sample.com/controller не http://www.sample.com/public/index.php/controller.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/index.php/$1 [L]

Мой файл.htaccess

18 ответов

Просто делать

Шаг 1. В каталоге public/ скопируйте index.php и.htaccess в корневой каталог проекта.

Шаг 2: В корневом каталоге проекта откройте index.php и отредактируйте следующую строку:

index.php -> $pathsPath = FCPATH. '../app/Config/Paths.php';

к

index.php => $pathsPath = FCPATH . 'приложение / Config / Paths.php';

Хорошо , вот как я решил эту проблему: вам нужно 2 файла.htaccess,
первый в корневом пути "/.htaccess" вашего проекта, второй в общей папке "public /.htaccess"

а вот и первый "/.htaccess"

# this is my version (Nassim) of the htaccess file , I use this one in the root directory "/"
# of the project and a second .htaccess in the public directory

DirectoryIndex /public/index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|assets|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./public/index.php/$1 [L,QSA]

и второй (идет с установкой CI): "public/.htaccess"

# I recommend you remove `IfModule`. Because if you need mod_rewrite,
# you don't need `IfModule`. If you don't need it, you don't need this file
# at all.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond $1 !^(index\.php|images|assets|doc|data|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

перейдите в app / Config / App.php, а затем в public $indexPage = 'index.php'; изменить на общедоступный $indexPage = '';

работает как шарм

Создайте файл с именем index.php вне общедоступного каталога и напишите команду

      require_once './public/index.php';

Вот и все.

  1. Настройте виртуальные хосты (если вы еще этого не сделали), но обязательно укажите каталог / public (пример xampp):

ServerAdmin webmaster@example.com
ServerName example.com
DocumentRoot "path-to-project/public"
<Directory "path-to-project/public">
    Order allow,deny
    Allow from all
    AllowOverride All
    Require all granted
</Directory>

  1. Не трогайте файлы.htaccess в дистрибутиве CI4 по умолчанию
  2. Отредактируйте app / Config / App.php - $baseURL = 'http://www.example.com/'; $indexPage = '';

Структура проекта


Если запустить проект в Xamp, показать, как это



Скопируйте public-->index.php в корневую папку-->index.php


Теперь запустите Like this в веб-браузере, покажите эту ошибку, чтобы решить эту проблему.


решение

          $pathsConfig = FCPATH . '../app/Config/Paths.php';
    to
   $pathsConfig = FCPATH . 'app/Config/Paths.php';

Теперь беги


создать .htaccess в корневой папке

      RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]


Теперь вы можете переключить имя вашего контроллера без .htaccess, ваш URL должен быть таким http://localhost:8080/payinlinks/index.php/login еще http://localhost:8080/payinlinks/login

Первый шаг - открыть файл app.app. И изменения упомянутые ниже. Вы должны сделать это в своем файле App.php. удалите index.php из URL-адреса Codeigniter.

Итак, перейдите в project_name / app / Config / App.php и измените указанное ниже: Как удалить Public / index.php / From URL в Codeigniter 4

       public $baseURL = 'http://localhost:8080';
To
public $baseURL = 'http://localhost/your_project_name/';

И второе изменение в файле app.php:

       public $uriProtocol = 'REQUEST_URI';
To
public $uriProtocol = 'PATH_INFO';

Шаг 2

В корневом каталоге проекта откройте index.php и отредактируйте следующую строку:

       $pathsPath = FCPATH . '../app/Config/Paths.php';

 change TO

 $pathsPath = FCPATH . 'app/Config/Paths.php';

Мы также можем удалить index.php в Codeigniter, используя.htaccess. Я привел пример ниже.

       RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Шаг 1:

  • Перейдите в Your_Project_Folder > App > Config > App.php
  • измените на $baseURL='http://localhost/Your_Project_Name'
  • изменить на $indexPage=""

Шаг 2:

  • Перейдите в Your_Project_Folder > Public

  • Скопируйте .httaccess и index.php

  • Вставьте эти файлы в Your_Project_Folder

Шаг 3:

  • Перейдите в папку Your_Project_Folder > index.php

  • изменить, FCPATH . '../app/Config/Paths.php' в FCPATH. 'приложение/Конфигурация/Пути.php'

ВСЕ СДЕЛАНО!!!

Я понятия не имею, как ты это получишь .htaccess, Если вы загрузите CodeIgniter 4 отсюда и увидите, что файл Htaccess отличается от того, что вы добавили.

Поскольку существует много изменений в CodeIgniter (1,2,3) для Codeigniter 4, htaccess перемещен в public/ папка, в которой будет установлен корень документа и .htaccess какое место снаружи не будет действовать в CI 4


Правильный путь к .htaccess

public/.htaccess

Примечание: я только что проверил index.php Проблема с URL, и не было такой проблемы. работал / грузился нормально без index.php

Шаг 1. В каталоге public/ скопируйте index.php и.htaccess в корневой каталог проекта.

Шаг 2: В корневом каталоге проекта откройте index.php и отредактируйте следующую строку:

изменение:

$pathsPath = FCPATH. '../app/Config/Paths.php';

изменить TO

($pathsPath = FCPATH. 'app / Config / Paths.php';)

введите описание изображения здесь

Перейдите в app/Config/App.php и найдите public $indexPage = 'index.php';. Удалять index.php из этой общедоступной переменной и все.

измените index.php =>

      require realpath(FCPATH . 'app/Config/Paths.php') ?: FCPATH . '../app/Config/Paths.php';

к

      require realpath(FCPATH . 'app/Config/Paths.php') ?: FCPATH . 'app/Config/Paths.php';

Создайте файл .htaccess в /public с помощью:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Вы пробовали это:

    RewriteEngine On
    RewriteBase /yoursite.com/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ public/index.php/$1 [L]

Мне удалось "решить" проблему на моем хостинг-сервере в одном проекте. После того, как я создал новый проект с более новой версией codeigniter 4, я понял, что больше не могу использовать то же решение, и после нескольких часов исследований я нашел очень простое решение.

Что я сделал, так это изменил корневой каталог на общую папку, используя.htaccess, который находится в корневой папке проекта.

#RewriteEngine on
#RewriteCond %{HTTP_HOST} ^mydomain.com$ [NC,OR]
#RewriteCond %{HTTP_HOST} ^mydomain.com$
#RewriteCond %{REQUEST_URI} !public/
#RewriteRule (.*) /public/$1 [L]

Используя этот трюк, я мог без проблем загрузить свой codeigniter 4 на живой сервер. Собственно, я использовал это для настройки проекта codeigniter 4 внутри поддомена.

Из общедоступного каталога скопируйте .htaccess и index.php в свой корневой каталог, а затем измените

      require realpath(FCPATH . '../app/Config/Paths.php') ?: FCPATH . '../app/Config/Paths.php';

к

      require realpath(FCPATH . 'app/Config/Paths.php') ?: FCPATH . 'app/Config/Paths.php';

Чтобы решить указанную выше проблему, удалив public / index.php из URL-адреса, вам следует выполнить следующие шаги:

  1. Скопируйте файлы index.php и .htaccess из public/ каталог.

  2. Добавьте файлы в корневой каталог проекта.

  3. Измените файл index.php в корневом каталоге проекта$pathsPath = realpath(FCPATH . '../app/Config/Paths.php'); в $pathsPath = realpath(FCPATH . 'app/Config/Paths.php');

Вот полный код файла index.php:

      // Valid PHP Version?
$minPHPVersion = '7.2';
if (phpversion() < $minPHPVersion)
{
    die("Your PHP version must be {$minPHPVersion} or higher to run CodeIgniter. Current version: " . phpversion());
}
unset($minPHPVersion);

// Path to the front controller (this file)
define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR);

// Location of the Paths config file.
// This is the line that might need to be changed, depending on your folder structure.
$pathsPath = realpath(FCPATH . 'app/Config/Paths.php');
// ^^^ Change this if you move your application folder

/*
 *---------------------------------------------------------------
 * BOOTSTRAP THE APPLICATION
 *---------------------------------------------------------------
 * This process sets up the path constants, loads and registers
 * our autoloader, along with Composer's, loads our constants
 * and fires up an environment-specific bootstrapping.
 */

// Ensure the current directory is pointing to the front controller's directory
chdir(__DIR__);

// Load our paths config file
require $pathsPath;
$paths = new Config\Paths();

// Location of the framework bootstrap file.
$app = require rtrim($paths->systemDirectory, '/ ') . '/bootstrap.php';

/*
 *---------------------------------------------------------------
 * LAUNCH THE APPLICATION
 *---------------------------------------------------------------
 * Now that everything is setup, it's time to actually fire
 * up the engines and make this app do its thang.
 */
$app->run();

В CodeIgniter версии 4.2 или выше вы должны следовать3 steps:

1st Step:Перейти в эту папку

Приложение -> конфигурация -> app.php

Обновить сyour project folder nameкак мы делаем в Like this:

      public $baseURL = 'http://localhost/your_project_name/';

В случае, если установкаci 4с использованиемcomposerто у вас есть этот тип, который вам нужно изменить с указанным выше:

      public $baseURL = 'http://localhost:8080';

2nd Step:Перейти в папку иcopyи файлы (помните, копируйте их, а не вырезайте из них здесь) Затем их в каталоге

Примечание. Так же, как мы удаляем вCodeigniter 3создав файл в корневой папке иpasteсоответствующий код в файле `.htaccess'.

3rd Step:Заменить папки.htaccessкод файла с этим:

      RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Затем откройтеrootпапкиindex.phpфайл и контрольная строка20или эта строка:

      require FCPATH . '../app/Config/Paths.php';

и удалить../из него вот так:

      require FCPATH . 'app/Config/Paths.php';

В случае, если вы создалиjsпапка вpublicпапку и соединил их с помощьюbase_urlнаviews/header.php views/footer.phpилиviews/index.phpтогда могут возникнуть проблемы, и эти файлы не будут получены из-за связанных с этим проблем:

Когда мы используемcdnэто дает этоsyntaxкоторый мы сделали локальным вот так, но из-заid="bootstrap-style"это возникает проблема, поэтому удалите эту форму этой строки:

      <link href="<?php echo base_url();?>/public/assets/css/bootstrap.min.css" id="bootstrap-style" />

Также сформируйте другиеlinkedфайл удалить этоtype="text/css"или любойid=""возникает проблема.

Правильный способ добавить ссылку — определитьrel="stylesheet"по ссылке вот так:

      <link rel="stylesheet" href="<?php echo base_url();?>/public/assets/css/bootstrap.min.css" />

В моем случае я получилbootstrapиcssсопутствующие проблемы.

Другие вопросы по тегам