用户
 找回密码
 入住 CI 中国社区
搜索
查看: 10805|回复: 3
收起左侧

去掉 URL 中的 index.php 修改httpd.conf文件实现

[复制链接]
发表于 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配置文件,注意修改自己对应的资源文件目录!
  1. <VirtualHost *:80>
  2. ServerAdmin [url=mailto:chian.goodname@gmail.com]chian.goodname@gmail.com[/url]
  3. DocumentRoot "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn"
  4. ServerName [url=http://www.com.cn]www.com.cn[/url]
  5. # Rewrite codeIgniter URI
  6. RewriteEngine On
  7. RewriteRule ^/images/(.*)$ /application/views/images/$1 [L,NC]
  8. RewriteRule ^/css/(.*)$ /application/views/css/$1 [L,NC]
  9. RewriteRule ^/js/(.*)$ /application/views/js/$1 [L,NC]
  10. RewriteRule ^/index\.php/(.*)$ /index.php/$1 [L,NC]
  11. RewriteRule ^/([^\./]+)/(.*)$ /index.php/$1/$2 [L,NC]
  12. RewriteRule ^/([^\./]+)$ /index.php/$1 [L,NC]
  13. </VirtualHost>
复制代码

这样就精简了掉了index.php,跟Hex那个帖子不同的是他用的方法是修改.htaccess(没有测试该方法,所以这里只供使用修改httpd.conf的网友参考,其它方法类似,如果使用修改.htaccess文件的方法,请参考Hex的去掉 URL 中的 index.php),

评分

参与人数 1威望 +5 收起 理由
Hex + 5 我很赞同

查看全部评分

发表于 2011-5-16 11:40:27 | 显示全部楼层
确实也是一种办法,嘿嘿,感谢分享
 楼主| 发表于 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。
下面贴出本人实践中的一些目录结构及配置!

  1. .htaccess
  2. application
  3. index.php
  4. license.txt
  5. system
复制代码

httpd.conf配置,加红部分为需要注意的部分!

  1. <VirtualHost *:80>
  2. ServerAdmin [email]chian.goodname@gmail.com[/email]
  3. DocumentRoot "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn"
  4. ServerName [url]www.com.cn[/url]
  5. <Directory "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn">
  6. Options [color=Red]FollowSymLinks[/color] IncludesNOEXEC Indexes
  7. DirectoryIndex index.html index.htm default.htm index.php default.php index.cgi default.cgi index.pl default.pl index.shtml
  8. [color=Red] AllowOverride All [/color]
  9. Order Deny,Allow
  10. Allow from all
  11. </Directory>
  12. </VirtualHost>
复制代码

.htaccess文件中的写法(注意与application同级)下面加红部分注意前面没有"/",资源文件存放在/application/views/目录下!

  1. RewriteEngine on
  2. RewriteRule ^images/(.*)$ /application/views/images/$1 [L,NC]
  3. RewriteRule ^css/(.*)$ /application/views/css/$1 [L,NC]
  4. RewriteRule ^js/(.*)$ /application/views/js/$1 [L,NC]
  5. RewriteRule ^/index\.php/(.*)$ /index.php/$1 [L,NC]
  6. RewriteRule ^/([^\./]+)/(.*)$ /index.php/$1/$2 [L,NC]
  7. RewriteRule ^[color=Red]([^\./]+)$[/color] /index.php/$1 [L,NC]
复制代码

根据以上步骤,ci的index.php即可去掉!享受吧!
发表于 2011-7-2 12:41:49 | 显示全部楼层
更改 config 文件 $config['uri_protocol'] = 'PATH_INFO';

本版积分规则