我想要像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 文件
我想要像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 文件
做就是了
第 1 步:在 public/ 目录中,将 index.php 和 .htaccess 复制到您的项目根目录。
第二步:在项目根目录下,打开 index.php 并编辑以下行:
index.php -> $pathsPath = FCPATH 。'../app/Config/Paths.php';
至
index.php => $pathsPath = FCPATH 。'app/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'; 更改为public $indexPage = '';
像魅力一样工作
在公共目录之外创建一个名为 index.php 的文件并编写命令
require_once './public/index.php';
而已。
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>
我不知道你是怎么得到这个.htaccess
的。如果您从此处下载 CodeIgniter 4,您会看到Htaccess文件与您添加的不同。
由于 CodeIgniter (1,2,3) 对 Codeigniter 4 有很多更改,因此htaccess 移动到public/
文件夹,该文件夹将设置为文档根目录,并且在 CI 4 中外部.htaccess
位置无效
正确的路径.htaccess
public/.htaccess
注意:我刚刚测试了index.php
URL 问题,没有这样的问题。工作/加载很好,没有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';
要解决上述从 url 中删除 public/index.php 的问题,您应该按照以下步骤操作:
从目录中复制index.php和.htaccess文件。public/
将文件添加到根项目目录。
将您的根项目目录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();
第 1 步:在 public/ 目录中,将 index.php 和 .htaccess 复制到您的项目根目录。
第二步:在项目根目录下,打开 index.php 并编辑以下行:
改变:
($pathsPath = FCPATH .'app/Config/Paths.php';)
你试过这个:
RewriteEngine On
RewriteBase /yoursite.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/index.php/$1 [L]
项目结构 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
我能够在一个项目中“解决”我的托管服务器中的问题。在我使用更新版本的 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 项目。
转到 app/Config/App.php 并找到public $indexPage = 'index.php';
. index.php
从这个公共变量中删除,就是这样。
在/public中创建一个.htaccess文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]