目录
CodeIgniter框架中关于URL(index.php)的那些事,codeigniter框架
PHP CodeIgniter框架中怎获取当前页面的URL
怎删除CodeIgniter框架中URL段里面的indexphp,实例,手册上的木看明白,自己写了个dome测试也不对
首页 后端开发 php教程 CodeIgniter框架中关于URL(index.php)的那些事,codeigniter框架_PHP教程

CodeIgniter框架中关于URL(index.php)的那些事,codeigniter框架_PHP教程

Jul 13, 2016 am 10:18 AM
codeigniter index.php url 关于 框架

CodeIgniter框架中关于URL(index.php)的那些事,codeigniter框架

最近,在做自己的个人网站时,采用了轻量级的php框架CodeIgniter。乍一看上去,代码清晰简洁,MVC模型非常容易维护。开发时我采用的工具是Netbeans IDE 8.0,当然,本文的内容和开发工具是没有关系的,和我们最后网站采用的服务器有很大的关系。目前最为常用的两款免费web服务器是Apache和Nginx(这两款服务器的比较,可以参考一篇网上的经典文章:http://zyan.cc/nginx_php_v6/)。在我网站开发与上线的过程中,刚好两个服务器都用到了,他们配置CodeIgniter时稍有区别,接下来分别阐述一下,也为了让其他开发者在使用CodeIgniter框架时少踩坑。

 

(1)关于CodeIgniter

CodeIgniter是一款开源的超轻量级MVC框架,常用于快速地Web开发中,如果你愿意,甚至可以随意地更改其中的源代码,以适应自己的需求。这个框架本身不想多做介绍,需要熟悉的朋友可以去CodeIgniter官方网站下载,并且官网也提供了非常详细的中文帮助手册,可以很好的帮助新人学习。帮助手册链接: http://codeigniter.org.cn/user_guide/toc.html 。帮助手册中从0开始教你搭建一个简单的网站。

 

(2)CodeIgniter架设的网站URL

最开始CodeIgniter搭建的网站URL是这样子的:

http://[网站网址]/index.php/[controller class name]/[class function name]/[function parameter]

举个例子说明:http://127.0.0.1/index.php/welcome/hello/zhangsan。这个例子中,假设了网站的网址是127.0.0.1,也就是我们常用的本机地址,采用controller文件夹中的welcome.php这个用php编写的类处理这个url请求,具体处理方法是调用这个welcome类里面的hello函数,这个函数是需要一个参数的,我们传进去的参数是字符串zhangsan。不过有一点比较碍眼,就是url里面包含了一个固定的字段index.php,看着很不爽。我想要的结果是这样的:http://127.0.0.1/welcome/hello/zhangsan。那么如何把index.php去掉呢?这就是我想主要分享的地方。

 

在讲如何去掉index.php之前,我们先弄清楚它为什么会出现在这里。对于任意一个url请求,CodeIgniter都是先由位于网站跟目录下的index.php文件处理的,这个文件再根据你提供的url中index.php后面的部分来确定把这个请求重新交给哪一个类的哪一个函数处理。因此,url中必须包含index.php这个字段,显式的告诉服务器,这个url你先让index.php去重新定向到我后面指定的类去处理。如果不经过任何配置就直接把index.php去掉,你的网页是显示不出来的。那么我们如果要去掉它,就是希望经过一些配置选项,让服务器见到一个url默认地就用index.php去处理就好了,不用再把index.php显示在url里面。

 

(3)Apache服务器下去掉index.php

我在自己电脑上开发时使用的是Apache服务器,因此不可避免地要先在Apache服务器下解决这个问题。其实,文章开始时提到的CodeIgniter官方帮助手册里面已经给了Apache下的解决办法,却没有给出Nginx下的解决办法。没办法,Apache服务器据说市场占有率已经超过60%,作为如此主流的服务器,官方手册还是有必要说明它的配置方法的。为了更加清晰一些,我再更加详细地说明一下。

 

在网站根目录下(也就是与前文提到的index.php同一个目录下),新建一个文件,名为.htaccess。注意不要忘了htaccess前面还有个点。用记事本打开这个文件,写入如下命令:

<span>RewriteEngine on

RewriteCond </span>%{REQUEST_FILENAME} !-<span>f
RewriteCond </span>%{REQUEST_FILENAME} !-<span>d

RewriteCond $</span><span>1</span> !^(index\.php|images|js|css|<span>robots\.txt)
RewriteRule </span>^(.*)$ /index.php/$<span>1</span> [L]
登录后复制

看一下英文单词Rewrite也猜到了,其实这个文件控制的就是url的重写规则。关于.htaccess文件的具体重写规则和全部种类的语法又是一门大学问,在这里就不详述了。我们只关心上面写的这几句话是啥意思。

第一句 RewriteEngine on:翻译过来就是“重写引擎 开启”,相当于启动url重写机制。

第二句 RewriteCond %{REQUEST_FILENAME} !-f:翻译过来就是“重写条件 请求文件名不是个文件”。最后一个字母f理解为file,!-f的感叹号表示否定,也就表示不是个file。

第三句 RewriteCond %{REQUEST_FILENAME} !-d:翻译过来就是“重写条件 请求文件名不是个目录”。最后一个字母d理解为directory。

第二句与第三句的用途是说,只有在你的URL请求不是文件的名字或者文件夹名字的时候,才启用重写规则。举例说明,比如http://127.0.0.1/test.html。这个请求其实就是在你的网站根目录下寻找test.html,如果找到了,就直接返回这个文件即可,不用重写;只有在根目录找不到test.html时,才重写这个url,这是REQUEST_FILENAME是个文件的例子。再比如http://127.0.0.1/nihao,这里nihao很有可能是根目录下的一个文件夹(当然也可以是一个没后缀的文件),这种情况下先寻找根目录有没有nihao这个文件夹,没有的话再启用url重写,这是REQUEST_FILENAME是个目录的例子。

第四句 RewriteCond $1 !^(index\.php|images|js|css|robots\.txt):翻译过来就是“重写条件 url网址后的第一个参数不可以是index.php,images, css, js, robots.txt任何一个”。比如 http://127.0.0.1/images/girl.png,这个url第一个参数是images,这种情况下不要重写,只有不是以上列出来的那些时才重写。这句话目的是排除一些url请求的重写,因为我们经常会把网站的css文件,javascript文件,图片文件放在根目录下的css,js,images文件夹下,然后在网页中通过url引用这些资源,如果请求这些资源的url也被重写了,网页中就引用不到了。你可以根据自己的实际需求,新添加一些需要排除在外的重写url的情况。

第五句 RewriteRule ^(.*)$ /index.php/$1 [L]:翻译过来就是“重写规则 把url网址后第一个参数前面加上index.php”。[L]表示这是最后一条重写规则,后面没有了。

这样,你如果在浏览器输入http://127.0.0.1/hello/zhangsan,其实相当于是http://127.0.0.1/index.php/hello/zhangsan。

最后还有一个小坑,就是在使用工具开发网站的时候,往往我们网站代码并不在Apache服务器的根目录下,比如我们在Apache服务器的根目录下又建立一个文件夹xxx,并且把网站整个放在这个文件夹里面,那么我们的主页地址就是http://127.0.0.1/xxx/index.php。这时必须把上面配置文件第五句话改为RewriteRule ^(.*) /xxx/index.php/$1 [L],还有一种改法是直接去掉第五句话中index.php前面的斜杠(即RewriteRule ^(.*)$ index.php/$1 [L]),这一点千万注意!

完成了上面的.htaccess文件后,还有两件事情要做。

第一,找到CodeIgniter中的application/config/config.php文件,把index_page设为空值,即$config['index_page'] = '"";还有base_url设为网站根目录(index.php所在目录),$config['base_url']="http://127.0.0.1/xxx/"。部署到真正服务器上使网站上线前,不要忘了把127.0.0.1改成你网站的网址,如果index.php放在服务器根目录,也记得把base_url里这个xxx去掉。

第二,找到Apache的配置文件,也就是conf/httpd.conf这个文件,确保LoadModule rewrite_module modules/mod_rewrite.so前面的井号#已经去掉了。然后关键字搜索htaccess,找到配置.htaccess的部分,其设置应该改为AllowOverride All。其实如果你没有用很旧版本的Apache,井号和AllowOverride All默认就应该是设置好了的。这一步只是确认一下,不是这么配的要改成这样。

至此,Apache服务器下CodeIgniter的URL配置大功告成。现在index.php已经不需要出现在URL中了,系统会默认让index.php先去处理URL。

(4)Nginx服务器下去掉index.php

上文中提到的Apache去掉index.php在官方帮助文档也有简要的说明,但是Nginx服务器就没有这么幸运了。我在网站开发时本地是Apache,但是网站上线时的服务器却是Nginx的,因此不得已又去网上搜索Nginx服务器下的配置,折腾了很久,试错试了很多次,总算把一个正确的版本试出来了,现在可以提供给大家参考。因为自己对于Nginx的配置没有深入研究过,所以先说明一下自己线上服务器用的环境,然后再展示Nginx配置的修改内容。以我目前的配置,亲测可以很好地工作,大家碰到了类似的问题可以按照我的配置尝试一下,不过我也不敢保证在您的系统上一定会奏效……我的线上服务器是买的XX云(避免广告~)服务器(自己从零开始搞一个服务器实在太麻烦了),系统配置好之后默认就是Nginx。操作系统采用的是Ubuntu 12.04,Nginx版本是nginx/1.1.19。

看网上好多人的Nginx服务器默认配置文件是/etc/nginx/nginx.conf,我的也不例外。不过有个注意事项,有时候nginx.conf中会有一句include ***(另外一个文件),也就是引用外边某个文件的内容作为配置文件,这时候,如果你没有在nginx.conf中找到服务器server相关配置,不妨去它include的另外一个文件中找一下,我的就是这种情况。在我的配置文件中,和服务器有关的配置应该改成如下:

<span>server {
        listen   </span><span>80</span><span>;

        root </span>/usr/share/nginx/<span>www;
        index index.php index.html index.htm;

        # Make site accessible </span><span>from</span> http:<span>//</span><span>localhost/</span>
<span>        server_name localhost;

        location </span>/<span> {
                index index.php index.html index.htm;
                
                # Uncomment to enable naxsi on </span><span>this</span><span> location
                # include </span>/etc/nginx/<span>naxsi.rules

                # 请留意下面这条重写规则,和前面的Apache有些类似
                </span><span>if</span> (!-<span>e $request_filename) { ##如果没有找到目标文件
                        rewrite </span>^/(.*)$ /index.php/$<span>1</span><span> last;
                        </span><span>break</span><span>;
                }
          
           
          # 上面的重写规则也可以改成下面这种形式,亲测两者都可行
          #</span><span> if</span> ($request_filename !~ (js|styles|images|robots\.txt|index\.php.*)){ ##如果不是请求js,styles等文件<br /><span>          #        rewrite </span>^/(.*)$ /index.php/$<span>1</span><span> last;<br />          #        </span><span>break</span><span>;<br />          # }
        }

        location </span>/doc/<span> {
                alias </span>/usr/share/doc/<span>;
                autoindex on;
                allow </span><span>127.0</span>.<span>0.1</span><span>;
                deny all;
        }
 
        location ~ \.php($|/)</span><span> {
                fastcgi_split_path_info </span>^(.+\.php)(.*<span>)$;
 
                fastcgi_pass </span><span>127.0</span>.<span>0.1</span>:<span>9000</span><span>;
      
                fastcgi_index index.php;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

        # deny access to .htaccess files, </span><span>if</span> Apache<span>'</span><span>s document root</span>
        # concurs with nginx<span>'</span><span>s one</span>
<span>        #
        location </span>~ /<span>\.ht {
                deny all;
        }
}</span>
登录后复制

具体的改动已经标注在上面的注释中了,很简单的一句重写规则,我却折腾了蛮久的时间。希望分享出来,帮助大家少踩坑。就写到这里吧!

 

PHP CodeIgniter框架中怎获取当前页面的URL

//use url helper
$this->load->helper('url');
current_url = current_url();
 

怎删除CodeIgniter框架中URL段里面的indexphp,实例,手册上的木看明白,自己写了个dome测试也不对

CodeIgniter 是一个轻量级的,快速的,能生成非常干净而且是对搜索引擎友好化的URL的PHPMVC框架,默认情况下,index.php 文件将被包含在你的 URL 中 例如:example.com/index.php/news/article/my_article首先确保你的Apache服务器支持支持 mod_rewrite,开启mod_rewrite需要修改httpd.conf,去掉LoadModule rewrite_module modules/mod_rewrite.so前的#你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:RewriteEngine onRewriteRule ^(.*)$ /index.php/$1 [L]如果你的项目不在根目录请把上面这一句改为:RewriteRule ^(.*)$ index.php/$1 [L]然后将该文件放在网站的根目录在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。注意根据你项目的位置修改文件的配置。将AllowOverride设置为none可以完全禁止使用.htaccess文件,注意将你Apache的配置文件AllowOverride设置成All
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/880091.htmlTechArticleCodeIgniter框架中关于URL(index.php)的那些事,codeigniter框架 最近,在做自己的个人网站时,采用了轻量级的php框架CodeIgniter。乍一看上去,代...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何评估Java框架商业支持的性价比 如何评估Java框架商业支持的性价比 Jun 05, 2024 pm 05:25 PM

评估Java框架商业支持的性价比涉及以下步骤:确定所需的保障级别和服务水平协议(SLA)保证。研究支持团队的经验和专业知识。考虑附加服务,如升级、故障排除和性能优化。权衡商业支持成本与风险缓解和提高效率。

PHP 框架的轻量级选项如何影响应用程序性能? PHP 框架的轻量级选项如何影响应用程序性能? Jun 06, 2024 am 10:53 AM

轻量级PHP框架通过小体积和低资源消耗提升应用程序性能。其特点包括:体积小,启动快,内存占用低提升响应速度和吞吐量,降低资源消耗实战案例:SlimFramework创建RESTAPI,仅500KB,高响应性、高吞吐量

golang框架文档最佳实践 golang框架文档最佳实践 Jun 04, 2024 pm 05:00 PM

编写清晰全面的文档对于Golang框架至关重要。最佳实践包括:遵循既定文档风格,例如Google的Go编码风格指南。使用清晰的组织结构,包括标题、子标题和列表,并提供导航。提供全面准确的信息,包括入门指南、API参考和概念。使用代码示例说明概念和使用方法。保持文档更新,跟踪更改并记录新功能。提供支持和社区资源,例如GitHub问题和论坛。创建实际案例,如API文档。

如何为不同的应用场景选择最佳的golang框架 如何为不同的应用场景选择最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根据应用场景选择最佳Go框架:考虑应用类型、语言特性、性能需求、生态系统。常见Go框架:Gin(Web应用)、Echo(Web服务)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。实战案例:构建RESTAPI(Fiber),与数据库交互(gorm)。选择框架:性能关键选fasthttp,灵活Web应用选Gin/Echo,数据库交互选gorm。

PHP 框架的学习曲线与其他语言框架相比如何? PHP 框架的学习曲线与其他语言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的学习曲线取决于语言熟练度、框架复杂性、文档质量和社区支持。与Python框架相比,PHP框架的学习曲线更高,而与Ruby框架相比,则较低。与Java框架相比,PHP框架的学习曲线中等,但入门时间较短。

Java框架的性能比较 Java框架的性能比较 Jun 04, 2024 pm 03:56 PM

根据基准测试,对于小型、高性能应用程序,Quarkus(快速启动、低内存)或Micronaut(TechEmpower优异)是理想选择。SpringBoot适用于大型、全栈应用程序,但启动时间和内存占用稍慢。

golang框架开发实战详解:问题答疑 golang框架开发实战详解:问题答疑 Jun 06, 2024 am 10:57 AM

在Go框架开发中,常见的挑战及其解决方案是:错误处理:利用errors包进行管理,并使用中间件集中处理错误。身份验证和授权:集成第三方库并创建自定义中间件来检查凭据。并发处理:利用goroutine、互斥锁和通道来控制资源访问。单元测试:使用gotest包,模拟和存根进行隔离,并使用代码覆盖率工具确保充分性。部署和监控:使用Docker容器打包部署,设置数据备份,通过日志记录和监控工具跟踪性能和错误。

golang框架性能比较:做出明智选择的指标 golang框架性能比较:做出明智选择的指标 Jun 05, 2024 pm 10:02 PM

选择Go框架时,关键性能指标(KPI)包括:响应时间、吞吐量、并发能力和资源使用。通过基准测试和比较框架的KPI,开发人员可以根据应用程序需求进行明智的选择,考虑预期负载、性能关键部分和资源限制。

See all articles