我希望普通网址如 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文件
答案 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';)
答案 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)
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>
答案 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';