如何在codeigniter的路径中删除“ index.php”


Answers:


90

如果您使用的是Apache,请将.htaccess文件放在根Web目录中,其中包含以下内容:

RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

另一个好的版本位于:

http://snipplr.com/view/5966/codeigniter-htaccess/


2
+1的链接!虽然不得不微调一下。-> RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule ^(。*)$ index.php / $ 1 [QSA,L]
OrangeRind

由于某种原因,我不得不在RewriteCond的开头添加一个斜杠。 RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
亨利

出于某种原因,如果URL中包含index.php,则实际上并没有将其删除,而是停留在该处并继续工作。
CMCDragonkai 2013年

1
我使用了所有可能的组合,但对于我来说仍然无效!您是如何工作的?
Roshdy 2015年

您的Apache安装程序需要配置为检查.htaccess文件-确保是这种情况。
肖恩·维埃拉

60

我在删除index.php时遇到了一些大问题。通常,以下.htaccess文件已在多台服务器上经过测试,并且通常可以正常运行:

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

<Files "index.php">
AcceptPathInfo On
</Files>  

如果您没有运气,那么下一步就是调整您的配置文件。尝试其他一些URI协议,例如

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

   $config['uri_protocol']  = 'ORIG_PATH_INFO';

如果仍然没有运气,请尝试更改重写规则以包括子文件夹。如果在开发服务器等上使用临时URL,这通常是一个问题:

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

只要尝试这些选项,就可以使用。另外,请确保将索引文件设置为:

$config['index_page'] = '';

祝好运!


我以为您的第一个代码对我来说是解决方案,但实际上它只是将任何domain / *之类的URL发送到domain / index.php,而不是将domain / welcome发送给welcome控制器。然后激动了一秒钟。现在尝试其他建议。
jsky

31

在应用程序的根目录中具有.htaccess文件,以及index.php文件。(检查htaccess扩展名是否正确,Bz htaccess.txt对我不起作用。)

并将以下规则添加到.htaccess文件中,

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

然后在application / config / config.php文件中找到以下行

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

如下设置变量为空。

$config['index_page'] = '';

就是这样,它对我有用。

如果仍然无法正常工作,请尝试将这些变量(“ AUTO”,“ PATH_INFO”,“ QUERY_STRING”,“ REQUEST_URI”和“ ORIG_PATH_INFO”)一一替换

$config['uri_protocol'] = 'AUTO';

3
谢谢,我很久以来一直在失败,不知道为什么我们的方法像黄油一样:D
Ahmed Samy 2012年

1
感谢MDeSilva。这篇文章节省了我的时间。
sanji 2013年

1
谢谢。其作品。顺便说一句,我不需要更改config.php。
2013年

1
谢谢,这对我有所帮助,我在WAMP中使用了PATH_INFO
T.Coutlakis 2014年

21

看一下system\application\config\config.php文件,有一个名为index_page

它应该看起来像这样

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

更改为

$config['index_page'] = "";

然后如前所述,您还需要向.htaccess文件添加重写规则

注意:在CodeIgniter v2中,此文件已从系统文件夹移至 application\config\config.php


9

以上所有方法对我来说都失败了,然后我发现我未在虚拟主机文件/ etc / apache2 / sites-available / default中将AllowOverride None更改为AllowOverride All

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All    <---- replace None with All
    </Directory>
    <Directory /var/www >
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All   <---  replace None with All
            Order allow,deny
            allow from all
    </Directory>

     ...


非常感谢,我也得到了AllowOverride None,现在可以了!
威利(Willy)

博客现在不见了,我非常希望阅读它。这些解决方案都不对我
有用

太棒了,救了我一天。
JChow 2014年

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

在更改RewriteRule。* index.php / $ 0 [PT,L]后,项目文件夹名称为“ codeigniter”。谢谢你们的支持。


6

步骤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]

使用第一上述例子仅适用于我的根,但不是形式负荷等仍会尝试使用的index.php在URL中,我会玩,然后回来,如果我能firugre出来尝试
萨姆

感谢@Vinod。我一直在为这个问题而发疯。我一直在网上搜索很长时间,尝试了各种解决方案,但是直到我遇到您的解决方案,它们才起作用。与CI一起前进。非常感谢:)
gomesh munda '02

5

只是以为我可能会补充

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

将是.htaccess,并确保以以下方式编辑您的application / config.php变量:

更换

$config['uri_protocol'] = AUTO 

$config['uri_protocol'] = REQUEST_URI

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

这肯定必须工作..尝试一下


4

确保您已启用mod_rewrite(我尚未启用)。
启用:

sudo a2enmod rewrite  

另外,替换AllowOverride NoneAllowOverride All

sudo gedit /etc/apache2/sites-available/default  

最终...

sudo /etc/init.d/apache2 restart  

我的.htaccess是

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  

我需要启用的另一个模块是actionsstackoverflow.com/questions/14419757/…–
Jasdeep Khalsa

4

完美的解决方案[在localhost和真实域上都经过测试]

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

3

这是我的CI项目之一的.htaccess:

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

最后一行应该提供您所需的内容,尽管您可能需要也可能不需要'/ projectFolder',具体取决于文件夹结构的设置方式。祝好运!



3

作为.htaccess文件,一个不错的选择是使用Kohana Framework提供的文件:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

经过深思熟虑的.htaccess才有效。


3

有两种方法可以在URL路径中为codeigniter解决index.php

1:在config / config.php中更改代码:

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

$config['index_page'] = '';

2:如果未创建,请在根路径中创建.htacess,复制以下代码:-

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

保存并检查您的Apache配置rewrite_module或mod_rewrite已启用。如果未启用,请启用。(最佳方法)!


这是正确的,直接来自CodeIgniter文档。我也使用这种方法。
德瓦尔德·埃尔斯

2

我在许多不同的主机上的apache2上测试了它,效果很好。

使用这个htaccess

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

确保你有enabled mod_rewirte一个phpinfo();

然后在config / config.php中执行此操作:

$config['index_url']    = '';
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

如果仍然无法使用,请尝试将其更改为第40/54行中$config['uri_protocol']='AUTO'列出的内部application/config/config.php文件之一:

有时我用:REQUEST_URI代替AUTO"QUERY_STRING"用于GODADDY hostings


2

看在 \application\config\config.php文件中,有一个名为index_page

它应该看起来像这样

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

更改为

$config['index_page'] = "";

然后,如上所述,您还需要向.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

如果您使用的是Linux并使用apache2服务器,则除了.htaccess文件的更改外,我们可能还需要覆盖apache2.conf文件。在/etc/apache2/apache2.conf中找到apache2配置文件。

搜索目录/ var / www /更改AllowOverride无-> AllowOverride全部

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory

1

将.htaccess文件放在您的根Web目录中

进行任何调整(如果不满足上述条件)将无法正常工作。通常它在系统文件夹中,应该在根目录中。干杯!


2
花了几个小时后,我读了此书,发现了自己的错误。
mohsin.mr 2013年

由于这种“小技巧”,我也花了至少一个小时。默认情况下,.htaccess文件位于application目录而不是根目录中。
vadim

1

我尝试了许多解决方案,但是我想到的是:

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots  \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

这将根据需要从网址中删除index.php。



0

这将帮助您将此代码粘贴到.htacess文件中的应用程序文件夹中

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

<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
  php_value short_open_tag 1
</IfModule>

0

这是我的全部魔力:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

希望能帮助到你!


0

嗨,这对我有用

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

以及这个

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

如果此codeigniter应用程序作为子域托管,则该文件夹是子文件夹的名称,例如domainname / folder / index.php。

希望对您有用。谢谢。


0

复制过去的代码到您的.htaccess文件中

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

尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以改善其长期价值。
本杰明W.

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

0

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

第三步:

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

sudo nano /etc/apache2/apache2.conf并编辑文件并更改为

AllowOverride All

用于www文件夹

第4步 :

启用apache mod重写(命令)

sudo a2enmod重写

步骤5:

重新启动Apache(命令)

sudo /etc/init.d/apache2 restart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.