apollosaar 发表于 2011-5-16 11:30:43

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

本帖最后由 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的那篇帖子实践的时候出现了错误:A PHP Error was encountered

Severity: Warning

Message: strpos() : Empty delimiter

Filename: core/URI.php

Line Number: 160
A PHP Error was encountered

Severity: Warning

Message: strpos() : Empty delimiter

Filename: core/URI.php

Line Number: 164
希望此贴能帮助遇到此问题的网友!
第一步:找到 system/core/URI.php:149-156行左右
将: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'])));
      }
修改成: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配置文件,注意修改自己对应的资源文件目录!
<VirtualHost *:80>
ServerAdmin chian.goodname@gmail.com
DocumentRoot "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn"
ServerName www.com.cn
# Rewrite codeIgniter URI
RewriteEngine On
RewriteRule ^/images/(.*)$ /application/views/images/$1
RewriteRule ^/css/(.*)$ /application/views/css/$1
RewriteRule ^/js/(.*)$ /application/views/js/$1
RewriteRule ^/index\.php/(.*)$ /index.php/$1
RewriteRule ^/([^\./]+)/(.*)$ /index.php/$1/$2
RewriteRule ^/([^\./]+)$ /index.php/$1
</VirtualHost>

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

onice 发表于 2011-5-16 11:40:27

确实也是一种办法,嘿嘿,感谢分享

apollosaar 发表于 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。
下面贴出本人实践中的一些目录结构及配置!

.htaccess
application
index.php
license.txt
system

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

<VirtualHost *:80>
ServerAdmin chian.goodname@gmail.com
DocumentRoot "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn"
ServerName www.com.cn
<Directory "D:/Program Files/APMServ5.2.6/www/htdocs/www.com.cn">
Options FollowSymLinks IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php index.cgi default.cgi index.pl default.pl index.shtml
AllowOverride All
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>

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

RewriteEngine on
RewriteRule ^images/(.*)$ /application/views/images/$1
RewriteRule ^css/(.*)$ /application/views/css/$1
RewriteRule ^js/(.*)$ /application/views/js/$1
RewriteRule ^/index\.php/(.*)$ /index.php/$1
RewriteRule ^/([^\./]+)/(.*)$ /index.php/$1/$2
RewriteRule ^([^\./]+)$ /index.php/$1

根据以上步骤,ci的index.php即可去掉!享受吧!

sanyc 发表于 2011-7-2 12:41:49

更改 config 文件 $config['uri_protocol'] = 'PATH_INFO';
页: [1]
查看完整版本: 去掉 URL 中的 index.php 修改httpd.conf文件实现