Codeigniter - 删除index.php

时间:2012-11-07 11:12:52

标签: .htaccess codeigniter-2 codeigniter-url

我已经尝试了几个小时但无法使其发挥作用。到处搜索答案,似乎没有什么能解决我的问题。

我甚至尝试过这里描述的解决方案:Remove index.php in codeigniter 2.1.0。一点也不运气。

我已将config ['index_page']设置为''。

我的.htaccess位于根文件夹(sys和app文件夹所在的位置)并且写成如下:

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

但是,我可以访问我的控制器方法的唯一方法是使用url中的该死的index.php。 是的,我的apache conf启用了mod重写。

任何帮助都会非常好。

修改

我会添加更多信息,也许它是相关的。

  • 我正在使用ZendServer。
  • 我现在在localhost工作。

5 个答案:

答案 0 :(得分:3)

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

我没有ZendServer的经验,但是今晚我也在使用xampp(没有ZendServer)的localhost上遇到了这个问题,最后得到了它的工作:

  1. 检查你的httpd.conf,并确保没有注释“LoadModule rewrite_module modules / mod_rewrite.so”行。
  2. 打开config.php,设置$ config ['base_url'] ='http:// localhost / yourdirectoryname /'
  3. 仍然在config.php中,设置$ config ['index_page'] =''
  4. 使用index.php(在我的情况下,htdocs / yourdirectoryname)在同一目录下创建.htaccess文件
  5. .htaccess文件的内容如上所述

答案 1 :(得分:1)

我没有使用代码点火器的经验,但如果我理解正确,你试图向用户提供像/index.php/my-page这样的东西,而不需要将index.php添加到它?

如果我是对的,你可以尝试这样的事情:

RewriteBase /                                 # make sure we always rewrite from within the root directory

RewriteCond %{REQUEST_FILENAME} !-f           # make sure the request is not to an existing file
RewriteCond %{REQUEST_FILENAME} !-d           # nor an existing directory
RewriteCond %{REQUEST_FILENAME} !^index\.php  # make sure we do only interpret requests that DO NOT start with index.php
RewriteRule ^(.*)$ index.php/$1 [L,QSA]       # interpret request as if it were to index.php/...

# make sure we do only interpret requests that DO start with index.php
RewriteRule ^index\.php/(.*)$ $1 [L,R,QSA]    # redirect user to new URL, which will be handled by the first rewriterule

请告诉我这是否有效

答案 2 :(得分:1)

尝试这个,我在任何地方的许多主机上使用过它,检查:

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

如果没有,则转到config.php文件并搜索此行:

|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string.  The default setting of 'AUTO' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| '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';

我使用AUTO,但您可能需要将其切换为REQUEST_URIQUERY_STRING,请尝试

答案 3 :(得分:0)

我终于设法解决了这个问题。感谢所有的答案,特别感谢@ddanurwenda。他的重写规则是解决我问题的唯一规则。

我忽略了一个Apache配置:我更改了这一行(来自httpd.conf):

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

以下内容:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
    Satisfy all
</Directory>

该配置使我的htaccess文件无法被读取。

答案 4 :(得分:0)

这是我使用和工作的。 在.htaccess中使用此代码

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

确保.htaccess位于根文件夹中。 (即:xampp / htdocs)

然后在你的config.php(application \ config)中替换 config['index_page']='index.php'   至 config['index_page']=''