15

我想要像www.sample.com/controller这样的普通 URL 而不是 www.sample.com/public/index.php/controller

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

我的 .htaccess 文件

4

14 回答 14

21

做就是了

第 1 步:在 public/ 目录中,将 index.php 和 .htaccess 复制到您的项目根目录。

第二步:在项目根目录下,打开 index.php 并编辑以下行:

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

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

于 2019-10-10T08:38:01.347 回答
15

好的,这就是我解决这个问题的方法:您需要 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>
于 2019-09-19T08:12:21.857 回答
8

转到app/Config/App.php然后public $indexPage = 'index.php'; 更改为public $indexPage = '';

像魅力一样工作

于 2021-02-10T16:01:29.467 回答
4

在公共目录之外创建一个名为 index.php 的文件并编写命令

require_once './public/index.php';

而已。

于 2021-02-08T19:56:35.580 回答
2
  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. 不要触摸默认 CI4 分发中的任何 .htaccess 文件
  2. 编辑 app/Config/App.php - $baseURL = ' http://www.example.com/ '; $indexPage = '';
于 2019-11-15T11:31:27.773 回答
1

我不知道你是怎么得到这个.htaccess的。如果您从此处下载 CodeIgniter 4,您会看到Htaccess文件与您添加的不同。

由于 CodeIgniter (1,2,3) 对 Codeigniter 4 有很多更改,因此htaccess 移动到public/文件夹,该文件夹将设置为文档根目录,并且在 CI 4 中外部.htaccess位置无效


正确的路径.htaccess

public/.htaccess

注意:我刚刚测试了index.phpURL 问题,没有这样的问题。工作/加载很好,没有index.php

于 2018-02-07T09:26:41.403 回答
0

更改 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';
于 2021-03-03T08:39:47.937 回答
0

要解决上述从 url 中删除 public/index.php 的问题,您应该按照以下步骤操作:

  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();
于 2021-10-01T07:01:34.253 回答
0

第 1 步:在 public/ 目录中,将 index.php 和 .htaccess 复制到您的项目根目录。

第二步:在项目根目录下,打开 index.php 并编辑以下行:

改变:

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

改成

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

在此处输入图像描述

于 2019-09-15T10:12:29.393 回答
0

你试过这个:

    RewriteEngine On
    RewriteBase /yoursite.com/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ public/index.php/$1 [L]
于 2019-09-15T10:19:31.797 回答
0

项目结构 codeigniter4


项目结构 codeigniter4

如果在 Xamp 中运行项目显示这样


在此处输入图像描述


将 public-->index.php 复制到根文件夹-->index.php 在此处输入图像描述


现在在 webbrowser 中运行 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]

在此处输入图像描述


http://localhost:8080/payinlinks/index.php/login 现在您可以在没有 .htaccess 的情况下切换控制器名称,您的 url 必须是这样的 http://localhost:8080/payinlinks/login 在此处输入图像描述

于 2021-12-27T06:22:41.580 回答
0

我能够在一个项目中“解决”我的托管服务器中的问题。在我使用更新版本的 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 项目。

于 2020-06-04T07:37:32.470 回答
0

转到 app/Config/App.php 并找到public $indexPage = 'index.php';. index.php从这个公共变量中删除,就是这样。

于 2021-08-24T08:27:29.960 回答
0

在/public中创建一个.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
于 2018-09-01T00:40:53.020 回答