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

时间:2009-09-18 15:46:01

标签: php mod-rewrite codeigniter url-rewriting

如何删除中心某处codeigniter中每条路径中的"index.php"? 我想要干净的非index.php-fied URLs

26 个答案:

答案 0 :(得分:88)

如果您使用Apache,请在根网站目录中放置一个.htaccess文件,其中包含以下内容:

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/

答案 1 :(得分: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'] = '';
祝你好运!

答案 2 :(得分: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 :(得分:21)

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

的变量

看起来应该是这样的

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

将其更改为

$config['index_page'] = "";

然后如上所述,您还需要向.htaccess文件

添加重写规则

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

答案 4 :(得分:9)

上述所有方法都失败了,然后我发现我没有在 / etc / apache2的虚拟主机文件中将 AllowOverride无更改为 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>

     ...

答案 5 :(得分:6)

  

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

答案 6 :(得分: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”。为我工作。谢谢你们的支持。

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

答案 8 :(得分:5)

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

这绝对有用..试一试

答案 9 :(得分:4)

完美的解决方案[在localhost和real domain上测试]

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

答案 10 :(得分:4)

确保您已启用mod_rewrite(我没有) 启用:

sudo a2enmod rewrite  

另外,将AllowOverride None替换为AllowOverride 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]  

答案 11 :(得分:3)

在codeigniter

的url路径中有两种方法可以解决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是否启用。如果没有那么请启用。 (最佳方法)!

答案 12 :(得分:3)

按照CI wiki中this tutorial的说明使用mod_rewrite

答案 13 :(得分:3)

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

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

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

答案 14 :(得分: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,只是有效。

答案 15 :(得分:2)

如果您使用的是linux并使用apache2服务器,那么我们可能需要在.htaccess文件的更改旁边覆盖apache2.conf文件。在 /etc/apache2/apache2.conf 上找到apache2配置文件。

搜索目录/ var / www /更改 AllowOverride无 - &gt; AllowOverride All

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

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

它对我有用,也希望你。

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

如果它还不起作用,请尝试将$config['uri_protocol']='AUTO'更改为第40/54行中列出的application/config/config.php文件中的一个:

有时我使用:REQUEST_URI代替AUTO"QUERY_STRING"用于goDaddy托管

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

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

答案 19 :(得分:1)

将.htaccess文件放在根网站目录中

无论你做什么调整 - 如果不符合上述要求 - 它将无效。通常它在System文件夹中,它应该在根目录中。干杯!

答案 20 :(得分:0)

这会对你有所帮助 将此代码粘贴到.htaccess文件中的应用程序文件夹中

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>

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

希望它有所帮助!

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

希望对你有用。感谢。

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

答案 24 :(得分:0)

comparingByValue

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

第3步:

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

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

AllowOverride All

用于www文件夹

第4步:

启用apache mod重写(命令)

  

sudo a2enmod重写

第5步:

重新启动Apache(命令)

sudo /etc/init.d/apache2 restart