CodeIgniter从url中删除index.php

时间:2013-10-04 14:04:46

标签: php .htaccess codeigniter apache2

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

我的apache2服务器上启用了

mod_rewrite。在config$config['index_page'] = '';

我的codeignitor root .htaccess文件包含,

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

但它仍然没有用。我哪里错了?

34 个答案:

答案 0 :(得分:213)

尝试以下

打开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] 

答案 1 :(得分:111)

步骤:-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”,然后找到并替换下面的代码

//find the below code
$config['uri_protocol'] = "AUTO"
//replace with the below code
$config['uri_protocol'] = "REQUEST_URI" 

除了wamp服务器之外,它不起作用,因为默认情况下rewrite_module已禁用,因此我们需要启用它。为此,请执行以下操作

  1. 左键单击WAMP图标
  2. 的Apache
  3. Apache Modules
  4. 左键单击rewrite_module
  5. Original Documentation

    Example Link

答案 2 :(得分:32)

第1步:

在htaccess文件中添加

<IfModule mod_rewrite.c>
  RewriteEngine On
  #RewriteBase /

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

第2步:

删除codeigniter config中的index.php

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

第3步:

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

sudo nano /etc/apache2/apache2.conf

并编辑文件&amp;改为

AllowOverride All

用于www文件夹

第4步:

启用apache mod rewrite(命令)

sudo a2enmod rewrite

第5步:

重启Apache(命令)

sudo /etc/init.d/apache2 restart

答案 3 :(得分: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

答案 4 :(得分:15)

  

步骤1 =&gt;将.htaccess文件放在存在应用程序和系统文件夹的根文件夹中。

     

步骤2 =&gt;如果你的网络路径使用子文件夹,如 - yourdomain.com/project/ - 那么在htaccess文件中使用以下代码

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

如果您的网络路径使用root文件夹,例如 - yourdomain.com - 那么在htaccess文件中使用以下代码

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

答案 5 :(得分: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]

答案 6 :(得分:10)

你的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]

希望这有帮助。

答案 7 :(得分:5)

  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'] = ''; 
    
  3. 删除index.php文件

    中的config.php
    1. 从您的服务器重写。

答案 8 :(得分:5)

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

答案 9 :(得分:4)

尝试这个。它可以帮助你为我工作。

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

将代码放在你的root htaccess文件中。并确保你有

$config['index_page'] = '';

在配置文件中。

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

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

答案 11 :(得分:3)

这些答案都很好,但对于新手(这是第一次做),这些都令人困惑。还有其他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";

答案 12 :(得分: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文件。 现在尝试一下。这个设置适合我。

答案 13 :(得分:2)

开发和生产

    # 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]

答案 14 :(得分: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.

答案 15 :(得分:2)

您可以转到 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>

好机会

答案 16 :(得分:1)

用2个步骤解决它。

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

答案 17 :(得分: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>

答案 18 :(得分:1)

我认为你的所有设置都很好,但你做错了你的htaccess文件去把你的htaccess添加到你的项目文件

<强> project_folder-&GT; 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]

答案 19 :(得分: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 [&#39; index_page&#39;]更改为应用程序文件夹中config.php中的空白,如下所示:

$config['index_page'] = '';

3)启用apache的“rewrite_module”。

重启你的apache并完成它。

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

答案 20 :(得分:0)

除了这些答案之外,我们可以添加index.php或编辑它(如果它已经存在) - 为了安全起见,你想要禁用index.php,列出你网站目录中的文件 - 然后更改内容进入

<?php
   header('location:your_required_starting.php'); 
?>

答案 21 :(得分:0)

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


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

更改为


 $config['index_page'] = '';

答案 22 :(得分:0)

次要的事情:(可选)

  

在将vhosts中的重写引擎状态更新为Rewrite ON后,尝试重新启动Apache。

需要注意的一件重要事情:

  

在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:)

答案 23 :(得分:0)

在.htaccess文件中添加以下代码行:

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

其中&#39;我的项目是您的项目文件夹名称。

You can read more about CodeIgniter or you ca download .htaccess file from here

答案 24 :(得分:0)

使用此代码。因为你有你的文件夹名称更改第二行。其中index.php文件和文件夹应用程序,系统文件夹谎言。大多数问题都是由于二线造成的。我们不配置项目所在的文件夹名称。重要的是第二行。这很容易删除index.php。     RewriteEngine on     RewriteBase / 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]    

转到controller / 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

答案 25 :(得分:0)

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

答案 26 :(得分:0)

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

  

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

vs。

  

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

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

答案 27 :(得分:0)

您可以通过在 .htaccess

中放置一些代码来从网址中删除 index.php

文件路径:root> .htacess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


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

希望它会起作用。

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

我希望成功运行

答案 29 :(得分:0)

按照这些步骤解决您的问题

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

2-更改第5行上的CodeIgnitor目录名称。 比如我的目录名是abc(添加你的名字)

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

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

注意:首先你必须通过删除注释来启用apachi的httpd.conf中的mod_rewrite

答案 30 :(得分:0)

尝试一下                  RewriteEngine开启

        # 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>

答案 31 :(得分: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] 

答案 32 :(得分: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

答案 33 :(得分:0)

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

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