如何从Codeigniter 4中的url中删除public / index.php /

时间:2018-01-22 06:55:16

标签: php codeigniter-4

我希望普通网址如 www.sample.com/controller而不是www.sample.com/public/index.php/controller

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

我的.htaccess文件

12 个答案:

答案 0 :(得分:4)

在public目录外创建一个名为index.php的文件并写入命令

require_once './public/index.php';

就是这样。

答案 1 :(得分:3)

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

像魅力一样工作

答案 2 :(得分:1)

我不知道你是怎么得到.htaccess的。如果您download CodeIgniter 4 from here,则可以看到Htaccess文件与您添加的文件不同。

由于CodeIgniter(1,2,3)对Codeigniter 4有很多变化, htaccess已移至public/文件夹 < em>设置为文档根 .htaccess哪些地方 在CI 4中无效

更正.htaccess

的路径
public/.htaccess

注意:我刚刚测试了index.php网址问题,并且没有这样的问题。在没有index.php

的情况下工作/加载正常

答案 3 :(得分:1)

只需

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

步骤2:在根项目目录中,打开index.php并编辑以下行:

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

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

答案 4 :(得分:1)

第一步是打开app.app文件。以及下面提到的更改。您必须在App.php文件中执行此操作。从网址Codeigniter中删除index.php。

因此请转到 project_name / app / Config / App.php 并更改以下内容:How To Remove Public/index.php/ From URL In 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';

我们还可以使用.htaccess在Codeigniter中删除index.php。我已经给出了以下示例。

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

答案 5 :(得分:0)

/ public 中使用

创建 .htaccess 文件:

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

答案 6 :(得分:0)

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

步骤2:在根项目目录中,打开index.php并编辑以下行:

更改:

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

更改为

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

enter image description here

答案 7 :(得分:0)

您是否尝试过此方法?

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

答案 8 :(得分:0)

好的,这就是我解决此问题的方法: 您需要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>

答案 9 :(得分:0)

  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 ='';

答案 10 :(得分: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项目。

答案 11 :(得分: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';