165

我当前的网址看起来像这样[mysite]index.php/[rest of the slug]
我想index.php从这些网址中删除。

mod_rewrite在我的 apache2 服务器上启用。在config,$config['index_page'] = '';

我的 codeignitor 根.htaccess文件包含,

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

但它仍然无法正常工作。我哪里错了?

4

34 回答 34

249

尝试以下

打开 config.php 并执行以下替换

$config['index_page'] = "index.php"

$config['index_page'] = ""

在某些情况下,默认设置uri_protocol无法正常工作。只需更换

$config['uri_protocol'] ="AUTO"

经过

$config['uri_protocol'] = "REQUEST_URI"

.htaccess

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

注意:.htaccess 代码因托管服务器而异。在某些托管服务器(例如:Godaddy)中需要使用额外的?在上面代码的最后一行。在适用的情况下,以下行将替换为最后一行:

// Replace last .htaccess line with this line
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 
于 2013-10-05T11:06:41.373 回答
143

步骤:-1打开文件夹“application/config”并打开文件“config.php”。在 config.php 文件中查找并替换以下代码。

//find the below code   
$config['index_page'] = "index.php" 
//replace with the below code
$config['index_page'] = ""

步骤:-2转到您的 CodeIgniter 文件夹并创建 .htaccess

Path:
Your_website_folder/
application/
assets/
system/
.htaccess <——— this file
index.php

步骤:-3在 .htaccess 文件中写入以下代码

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

步骤:-4在某些情况下,uri_protocol 的默认设置无法正常工作。要解决这个问题,只需打开文件“application/config/config.php”,然后找到并替换以下代码

//Not needed for CodeIgniter 3 its already there.
//find the below code
$config['uri_protocol'] = "AUTO"
//replace with the below code
$config['uri_protocol'] = "REQUEST_URI" 

仅此而已,但在 wamp 服务器中它不起作用,因为 rewrite_module 默认禁用,因此我们需要启用它。为此,请执行以下操作

  1. 左键单击 WAMP 图标
  2. 阿帕奇
  3. 阿帕奇模块
  4. 左键单击 rewrite_module

原始文件

示例链接

于 2015-03-03T10:03:40.067 回答
49

步骤1 :

在 htaccess 文件中添加这个

<IfModule mod_rewrite.c>
  RewriteEngine On
  #RewriteBase /

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [QSA,L]
</IfModule>

第2步 :

删除 codeigniter 配置中的 index.php

$config['base_url'] = ''; 
$config['index_page'] = '';

第 3 步:

允许在 Apache 配置(命令)中覆盖 htaccess

sudo nano /etc/apache2/apache2.conf

并编辑文件并更改为

AllowOverride All

对于 www 文件夹

第4步 :

启用 apache mod rewrite(命令)

sudo a2enmod rewrite

第 5 步:

重启 Apache(命令)

sudo /etc/init.d/apache2 restart
于 2014-05-05T07:35:20.530 回答
16
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

利用

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$1 [PT,L]

如果您在此订单中有网址 site.com/index.php/class/method/id

注意:删除 config.php 中的 index.php 应该是 config[index_page] = ""

注意:注意最后一行的区别,而不是 $0 使用 $1

于 2014-03-26T15:10:08.660 回答
16

第 1 步 => 将您的 .htaccess 文件放在存在应用程序和系统文件夹的根文件夹中。

第 2 步 => 如果您的网络路径使用子文件夹,例如 - yourdomain.com/project/ - 然后在 htaccess 文件中使用以下代码

RewriteEngine on
RewriteBase    /project/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /project/index.php/$1 [L]

如果您的网络路径使用根文件夹(如 yourdomain.com),则在 htaccess 文件中使用以下代码

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
于 2014-09-04T09:27:46.847 回答
11

在你的 htaccess 上使用这个,

RewriteEngine On
RewriteBase /root_folder_name/
RewriteCond %{REQUEST_URI} ^system.*
RewriteCond $1 !^(index\.php|images|js|uploads|css|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

希望这可以帮助。

于 2013-10-04T14:08:17.297 回答
11

有两个步骤:

1) 编辑 config.php

$config['index_page'] = 'index.php';

$config['index_page'] = '’;

2) 创建/编辑 .htaccess 文件

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
于 2015-06-03T06:36:23.157 回答
8

分两步解决。

  1. 更新配置文件application/config/config.php中的 2 个参数
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
  1. 更新根文件夹中的文件.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
于 2019-02-28T09:17:12.707 回答
6

1.在根目录创建一个新文件.htaccess。

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

2. 转到您的 config.php 文件并从 更改 $config['index_page'] = 'index.php'$config['index_page'] = ''

于 2015-06-12T05:47:11.447 回答
6
  1. 制作.htaccess文件并放置此代码

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

    $config['index_page'] = ''; 
    

删除文件中index.php的存在config.php

  1. 从您的服务器重写。
于 2016-10-06T07:53:26.400 回答
5

试试这个。它可以帮助你,因为它对我有用。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

把代码放在你的根 htaccess 文件中。并确保你有

$config['index_page'] = '';

在你的配置文件中。

如果您遇到任何问题,请告诉我。

于 2013-10-05T07:47:55.460 回答
4
+ Copy .htaccess from Application to Root folder
+ edit .htaccess and put

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /ci_test/

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

Note: make sure your web server is enable for  "rewrite_module"

+ Remove index.php from $config['index_page'] = 'index.php';
- edit config.php in application/config
- search for index.php
change it from  $config['index_page'] = 'index.php'; to  $config['index_page'] = '';

请观看此视频以供参考https://www.youtube.com/watch?v=HFG2nMDn35Q

于 2015-07-23T02:09:10.673 回答
4

好吧,所有这些答案都很好,但对于新手(这是第一次做)来说,这些都是令人困惑的。还有其他 htaccess 文件驻留在控制器中,但我们必须在主项目文件夹中编辑或添加 htaccess。

这是您的 codeigniter 文件夹,其中包含文件,如应用程序、系统、资产、上传等。

Your_project_folder/
application/
assets/
cgi-bin/
system/
.htaccess---->(Edit this file if not exist than create it)
index.php

更改此文件,如下所示:

<IfModule mod_rewrite.c>
  RewriteEngine On
  # !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading
  #  slashes.
  # If your page resides at http://www.example.com/mypage/test1
  # then use RewriteBase /mypage/test1/
  # Otherwise /
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
  # If we don't have mod_rewrite installed, all 404's
  # can be sent to index.php, and everything works as normal.
  # Submitted by: Anand Pandey
  ErrorDocument 404 /index.php
</IfModule>

是的,当然您需要更改 application/config/config.php 中的两行代码

//find the below code   
$config['index_page'] = "index.php";
$config['uri_protocol'] ="AUTO" 
//replace with the below code
$config['index_page'] = "";
$config['uri_protocol'] = "REQUEST_URI";
于 2017-11-13T05:55:45.663 回答
3

您可以转到config\config.php文件并从此变量中删除 index.php 值

$config['index_page'] = 'index.php'; // delete index.php

创建 .htaccess 文件并将此代码粘贴到其中。

<IfModule mod_rewrite.c>

 Options +FollowSymLinks

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

</IfModule>

好机会

于 2014-04-11T21:16:09.160 回答
3

首先你必须在 apache 服务器上重写引擎。这个链接将帮助你

http://www.anmsaiful.net/blog/php/enable-apache-rewrite-module.html

RewriteEngine On
RewriteBase /your_folder_name/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?/$1 [L]

这将是您的 .htaccess 文件。现在试试吧。这个设置对我有用。

于 2015-01-15T05:56:26.080 回答
3

开发和生产

    # Development
    RewriteEngine On
    RewriteBase /your_local_folder/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|images|scripts|styles|vendor|robots\.txt)
    RewriteRule ^(.*)$ index.php/$1 [L]

    #Production PHP5 CGI mode
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|images|scripts|styles|vendor|robots\.txt)
    RewriteRule ^(.*)$ index.php?/$1 [L]
于 2014-08-06T04:55:18.913 回答
2
  Removing index.php from url of codeigniter   

Three steps are require to remove index.php from url in Codeigniter.

1)Create .htacess file in parallel to application holder and just copy past the following code:

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

2) Change $config['index_page'] to blank in config.php in application folder as below:

$config['index_page'] = '';

3) Enable “rewrite_module” of apache.
于 2014-06-03T13:17:24.757 回答
1

从 Codeigniter 的 url 中删除 index.php 只需要三个步骤

1) 与应用程序持有者并行创建 .htacess 文件,然后复制以下代码:

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

2) 在应用程序文件夹中的 config.php 中将 $config['index_page'] 更改为空白,如下所示:

$config['index_page'] = '';

3) 启用 apache 的“rewrite_module”。

重新启动您的 apache 并完成。

详细信息:http ://sforsuresh.in/removing-index-php-from-url-of-codeigniter-in-wamp/

于 2014-05-16T14:05:03.413 回答
1

您可以通过在.htaccess中放置一些代码来从 url中删除index.php

文件路径:root > .htacess

RewriteEngine On
RewriteBase /

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

希望它会奏效。

于 2018-10-23T08:27:23.967 回答
1

这对我有用。在 codeigniter 3.1.11、PHP 5.6.40 中测试我在测试服务器的 apache2 配置中使用虚拟主机。

<VirtualHost *:80>
     ServerAdmin webmaster@dummy-host2.example.com
     DocumentRoot (__DIR__)
     ServerName mydomain
     ##ErrorLog "logs/dummy-host2.example.com-error.log"
     ##CustomLog "logs/dummy-host2.example.com-access.log" common
     <Directory "(__DIR__)">
        Require all granted
        AllowOverride All
   </Directory>
</VirtualHost>

和 /.htaccess 内容

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteRule ^(.*)$ index.php/$1 [L] 
    </IfModule>
于 2020-06-26T11:51:00.223 回答
1

试试这个 RewriteEngine On

        # Removes index.php from ExpressionEngine URLs
        RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
于 2019-04-24T10:56:08.000 回答
1

在您的根文件夹中添加 .htaccess 并通过以下代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
于 2021-07-28T08:39:15.913 回答
1

我认为您的所有设置都很好,但是您确实放错了 htaccess 文件,然后将 htaccess 添加到项目文件中

项目文件夹->htaccess

并将此代码添加到您的 htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
于 2016-05-30T05:57:22.600 回答
1

您可以转到 application\config\config.php 文件并删除 index.php

 $config['index_page'] = 'index.php'; // 删除 index.php

改成

 $config['index_page'] = '';

于 2017-08-10T17:25:10.780 回答
0

按照这些步骤你的问题将得到解决

1- 从这里下载 .htaccess 文件https://www.dropbox.com/s/tupcu1ctkb8pmmd/.htaccess?dl=0

2- 在第 5 行更改 CodeIgnitor 目录名称。就像我的目录名称是 abc (添加你的名字)

3-将 .htaccess 文件保存在 codeignitor 文件夹的主目录 (abc) 上

4- 在 Config.php 文件中将 uri_protocol 从 AUTO 更改为 PATH_INFO

注意:首先,您必须通过删除注释从 apachi 的 httpd.conf 启用 mod_rewrite

于 2014-08-28T12:04:14.977 回答
0

使用此代码。更改第二行,因为你有你的文件夹名称。index.php 文件和文件夹应用程序、系统文件夹所在的位置。大多数问题是由于第二行而发生的。我们不配置项目所在的文件夹名称。重要的是第二行。删除 index.php 很简单。RewriteBase 上的 RewriteEngine /project_folder_name RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php/$0 [PT,L]

#RewriteEngine on
#RewriteCond $1 !^(index\.php|images|robots\.txt)
#RewriteRule ^(.*)$ index.php/$1 [L]    

转到控制器/config.php 文件。

配置['index_url']='';

更多学习参考。

https://ellislab.com/expressionengine/user-guide/urls/remove_index.php.html

https://ellislab.com/blog/entry/fully-removing-index.php-from-urls

于 2014-12-18T04:49:08.360 回答
0

您可以通过在项目的基本目录中创建 .htaccess 文件来从 URL 中消除 index.php,该文件的内容为

RewriteEngine on
RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png)
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ ./index.php/$1 [L]

保存该文件,您在 config.php 文件中的更改也是正确的

$config['index_page'] = '';

我希望运行成功

于 2019-01-11T17:32:53.100 回答
0
  1. 在根目录中创建一个 .htaccess 文件(通过项目名称更改 RewriteBase)

创建 .htaccess 文件后,将以下代码添加到该文件中。

RewriteEngine On
RewriteBase /CodeigniterCURD/
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
  1. 删除 index.php 文件(在 CONFIG.PHP 文件中)

在文本编辑器中打开 config.php 文件并从此处删除 index.php。

改变:

$config['index_page'] = "index.php";
To:
$config['index_page'] = '';

但在少数情况下,可能会发生 url_protocol 的默认设置无法正常工作。为了解决这个问题,我们需要打开 config.php 和

更改:根据你的项目名称

$config['base_url'] = 'http://localhost:8082/CodeIgniter/';


[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/1Ew3Q.png
于 2021-05-18T09:44:36.170 回答
0

如果上述所有解决方案都不起作用,那么在您的项目文件夹中它们将是两个文件 index.html 和 index.php,将 index.html 重命名为 index_1.html 并浏览您的项目。

于 2018-03-15T15:28:55.343 回答
0

在 CodeIgniter 3.16 中使用 htaccess 来

删除 index.php 文件

& 还

将 HTTP 重定向到 HTTPS

以下是代码:

  • application\config\config.php档案

做出改变

$config['index_page'] = 'index.php';

$config['index_page'] = '';
  • 现在,打开 .htaccess 文件,更新下面的代码
RewriteEngine on
RewriteBase /

## Redirect SSL
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

## Remove fron url index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^/(index\.php|assets/|humans\.txt)
RewriteRule ^(.*)$ index.php/$1 [L] 

于 2019-11-10T06:23:39.413 回答
0

除了这些答案之外,您还可以添加 index.php 或对其进行编辑(如果它已经存在) - 为了安全起见,无论如何您都希望禁用 index.php,从在您的网站目录中列出文件 - 然后将内容更改为

<?php
   header('location:your_required_starting.php'); 
?>
于 2016-11-24T07:21:54.100 回答
0

注意与添加的“?”的区别 “.php”之后的字符,尤其是在处理 CodeIgniter 时:

重写规则 ^(.*)$ index.php/$1 [L]

对比

RewriteRule ^(.*)$ index.php?/$1 [L]

这取决于其他几件事..如果不起作用,请尝试其他选项!

于 2018-08-10T05:28:34.477 回答
0

您必须将 .htaccess 放在 htdocs 文件夹中,以及

RewriteRule ^(.*)$ /index.php/$1 [L] 

必须这样写:

RewriteRule ^(.*)$ /your_codeigniter_project_folder/index.php/$1 [L]

是的,我知道如果你在 xampp 中有其他项目,他们会搞砸的:(

当您将站点上传到远程服务器时,您可以从 .htaccess 文件内容中删除 /your_codeigniter_project_folder/

于 2021-10-13T03:36:57.003 回答
0

小事:(可选)

在将 vhosts 中的重写引擎状态更新为Rewrite ON.

需要注意的一件关键事情:

在 Apache vhosts 文件中,检查是否有此脚本行 AllowOverride None 如果有,请删除/注释此行。

我的 vhosts 文件脚本:(之前)

<VirtualHost *:80>
    DocumentRoot "/path/to/workspace"
    ServerName ciproject
    ErrorLog "/path/to/workspace/error.log"
    CustomLog "/path/to/workspace/access.log" common
    Directory   "/path/to/workspace">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory> 
</VirtualHost>

我的 vhosts 文件脚本:(之后)

<VirtualHost *:80>
    DocumentRoot "/path/to/workspace"
    ServerName ciproject
    ErrorLog "/path/to/workspace/error.log"
    CustomLog "/path/to/workspace/access.log" common
    Directory   "/path/to/workspace">
        Options Indexes FollowSymLinks
        #AllowOverride None
        Order allow,deny
        Allow from all
    </Directory> 
</VirtualHost>

我遇到了同样的问题,挣扎了大约 1 天,一切都很好。后来通过反复试验的方法,发现了这个东西。删除它后,我的工作就完成了。该 URL 现在不查找 index.php :)

于 2017-09-05T13:26:03.093 回答