设为首页收藏本站

CodeIgniter 中国开发者社区

 找回密码
 入住 CI 中国社区

QQ登录

只需一步,快速开始

查看: 1957|回复: 3

去掉 URL 中的 index.php 修改httpd.conf文件实现 [复制链接]

论坛元老

神级人物

Rank: 8Rank: 8

注册时间
2011-4-25
帖子
47
精华
0
威望
3
发表于 2011-5-16 11:30:43 |显示全部楼层
本帖最后由 apollosaar 于 2011-5-16 15:43 编辑

声明:
       本帖版权均来自ci中国以及互联网,如果有涉及版权问题,与本人无关;
其中参考了Hex的去掉 URL 中的 index.php帖子及会员:TurboY的回复使用的方法有丁点不同,大致还是一样;
附:修改httpd.conf文件实现了在项目中能即时看到资源文件的显示,一般我们的资源文件是放到application\views目录下面的,照着本人修改httpd.conf文件,不仅可以在开发工具中(DW,Eclipse等等)不用去管路径的问题,在发布项目后,会自动304到相关资源文件,仅作参考!
测试环境:win7 + APMServ 5.2.6套件(Apache 2.2.9¡ PHP
5.2.6¡ MySQL 5.1.28£¦4.0.26¡ Nginx¡ Memcached¡ phpMyAdmin¡ OpenSSL¡ SQLite¡ ZendOptimizer£¬ÒÔ¼°ASP¡ CGI¡ Perl) CodeIgniter 2.0
为什么会有此贴?因为本人在参考Hex的那篇帖子实践的时候出现了错误:
HTML
A PHP Error was encountered
 
Severity: Warning
 
Message: strpos() [function.strpos]: Empty delimiter
 
Filename: core/URI.php
 
Line Number: 160
A PHP Error was encountered
 
Severity: Warning
 
Message: strpos() [function.strpos]: Empty delimiter
 
Filename: core/URI.php
 
Line Number: 164
复制代码

希望此贴能帮助遇到此问题的网友!
第一步:找到 system/core/URI.php:149-156行左右
将:
PHP
if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
        {
            $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
        }
        elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
        {
            $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
        }
复制代码

修改成:
PHP
if($_SERVER['SCRIPT_NAME'] != '')
    {
        if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
        {
            $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
        }
        elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
        {
            $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
        }
    }
复制代码

据官网论坛上说明,这是一个bug,修改即可.
下面贴出我的apache配置文件,注意修改自己对应的资源文件目录!
TEXT
<VirtualHost *:80>
ServerAdmin [url=mailto:chian.goodname@gmail.com]chian.goodname@gmail.com[/url]
DocumentRoot "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn"
ServerName [url=http://www.com.cn]www.com.cn[/url]
# Rewrite codeIgniter URI
RewriteEngine On
RewriteRule ^/images/(.*)$ /application/views/images/$1 [L,NC]
RewriteRule ^/css/(.*)$ /application/views/css/$1 [L,NC]
RewriteRule ^/js/(.*)$ /application/views/js/$1 [L,NC]
RewriteRule ^/index\.php/(.*)$ /index.php/$1 [L,NC]
RewriteRule ^/([^\./]+)/(.*)$ /index.php/$1/$2 [L,NC]
RewriteRule ^/([^\./]+)$ /index.php/$1 [L,NC]
</VirtualHost>
复制代码

这样就精简了掉了index.php,跟Hex那个帖子不同的是他用的方法是修改.htaccess(没有测试该方法,所以这里只供使用修改httpd.conf的网友参考,其它方法类似,如果使用修改.htaccess文件的方法,请参考Hex的去掉 URL 中的 index.php),
已有 1 人评分威望 收起 理由
Hex + 5 我很赞同

总评分: 威望 + 5   查看全部评分

天使の翼,是最勇敢的种子,一生下来就有一双翅膀。不管遇到多大风雨和挫折,都不放弃追寻梦想,继续飞翔。
博客:http://anttribe.org
邮箱:china.goodname@gmail.com
微博:http://weibo.com/linkunli
GTalk(china.goodname).TalkBox(apollosaar)

Rank: 2

注册时间
2011-2-12
帖子
33
精华
0
威望
0
发表于 2011-5-16 11:40:27 |显示全部楼层
确实也是一种办法,嘿嘿,感谢分享
支持(0) 反对(0)

使用道具 举报

论坛元老

神级人物

Rank: 8Rank: 8

注册时间
2011-4-25
帖子
47
精华
0
威望
3
发表于 2011-5-16 15:55:04 |显示全部楼层

去掉 URL 中的 index.php 修改.htaccess文件实现 完整版

声明:
       本帖版权均来自ci中国以及互联网,如果有涉及版权问题,与本人无关;
其中参考了Hex的去掉 URL 中的 index.php帖子及会员:ayin的回复,只有些许不同,大致还是一样;
附:照着本文修改.htaccess文件,不仅可以在开发工具中(DW,Eclipse等等)不用去管路径的问题,在发布项目后,会自动304到相关资源文件,仅作参考!
如果想修改httpd.conf实现请参考本人另外一篇帖子!
去掉 URL 中的 index.php 修改httpd.conf文件实现测试环境:win7 + APMServ 5.2.6套件(Apache 2.2.9¡ PHP
5.2.6¡ MySQL 5.1.28£¦4.0.26¡ Nginx¡ Memcached¡ phpMyAdmin¡ OpenSSL¡ SQLite¡ ZendOptimizer£¬ÒÔ¼°ASP¡ CGI¡ Perl) CodeIgniter 2.0
首先注意的几点:
apache的httpd.conf文件中,有两个地方必须设置才能成功开启htaccess
其一: # LoadModule rewrite_module modules/mod_rewrite.so去掉这句前面的#号
其二:找到AllowOverride None,把其中的None改成All。
我的httpd.conf是设置成了多站点模式,配合hosts文件本地实现自定义域名的方式来访问各个不同的站点。每个站点都有一段apache的配置。其中我都加上了AllowOverride All。
下面贴出本人实践中的一些目录结构及配置!
TEXT
.htaccess
application
index.php
license.txt
system
复制代码

httpd.conf配置,加红部分为需要注意的部分!
TEXT
<VirtualHost *:80>
ServerAdmin [email]chian.goodname@gmail.com[/email]
DocumentRoot "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn"
ServerName [url]www.com.cn[/url]
<Directory "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn">
Options [color=Red]FollowSymLinks[/color] IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php index.cgi default.cgi index.pl default.pl index.shtml
[color=Red] AllowOverride All [/color]
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
复制代码

.htaccess文件中的写法(注意与application同级)下面加红部分注意前面没有"/",资源文件存放在/application/views/目录下!
TEXT
RewriteEngine on
RewriteRule ^images/(.*)$ /application/views/images/$1 [L,NC]
RewriteRule ^css/(.*)$ /application/views/css/$1 [L,NC]
RewriteRule ^js/(.*)$ /application/views/js/$1 [L,NC]
RewriteRule ^/index\.php/(.*)$ /index.php/$1 [L,NC]
RewriteRule ^/([^\./]+)/(.*)$ /index.php/$1/$2 [L,NC]
RewriteRule ^[color=Red]([^\./]+)$[/color] /index.php/$1 [L,NC]
复制代码

根据以上步骤,ci的index.php即可去掉!享受吧!
天使の翼,是最勇敢的种子,一生下来就有一双翅膀。不管遇到多大风雨和挫折,都不放弃追寻梦想,继续飞翔。
博客:http://anttribe.org
邮箱:china.goodname@gmail.com
微博:http://weibo.com/linkunli
GTalk(china.goodname).TalkBox(apollosaar)
支持(0) 反对(0)

使用道具 举报

Rank: 2

注册时间
2009-2-17
帖子
1
精华
0
威望
0
发表于 2011-7-2 12:41:49 |显示全部楼层
更改 config 文件 $config['uri_protocol'] = 'PATH_INFO';
支持(0) 反对(0)

使用道具 举报

访问CI中国遇到困难请点这里|手机版|Archiver|CodeIgniter 中国 ( 津ICP备05003162 )  

GMT+8, 2012-5-18 05:24

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部