Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 978|回复: 0

CI框架 .htaccess 隐藏url在index.php解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-5 07:07:11 | 显示全部楼层 |阅读模式

    CodeIgniter(下面简称"CI")是一款国外优秀的PHP轻量级MVC框架,它支持PHP4和PHP5。是开发中小型可拓展性需求高的Web应用程序的利器。眼下你所见到的这个博客程序,正是採用CI进行的编写。

    秉承MVC架构的思想,CI中的全部控制器都须要经过单点入口文件index.php(默认)来载入调用。

    也就是说。在默认情况下,全部CI开发项目的URL都形例如以下面这样的形式:

    http://localhost/index.php/blog/logs/this_is_a_test_entry

    非常显然。默认情况下。index.php在URL地址段中的存在一定程度上影响了URL的简洁和SEO的进行。

    我们能够通过以下本文介绍的方法来去掉这个讨厌的Index.php。

    你也许已经注意到在CodeIgniter用户手冊中,已经存在关于此问题的解决方法。

    但官方提供的这个.htaccess配置,并非全部时候都能解决这个问题。本文如今给出一个更完好的解决方式。

    注意:在继续之前,请确认你的主机支持.htaccess配置。当中。假设Apache作为Webserver,须要开启mod_rewrite模块的支持;假设将IIS作为Webserver,则须要额外安装ISAPI_Rewrite拓展。

    详细方法例如以下:

    1. 将下面配置信息复制并保存为.htaccess文件。

    下面为.htaccess文件信息
    1 2 3 4 5 6 7 8 9 10 11 12 13 14

    RewriteEngineOn

    RewriteBase /  

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d  

    RewriteRule^(.*)$ /index.php?/$1 [L]      

    #假设没有安装mod_rewrite模块,全部的404页面都将被 #发送到index.php。此时,程序会像没有设置隐藏时一样执行   ErrorDocument404 /index.php

     2. 将以上.htaccess文件上传到CI所在项目的根文件夹(即与index.php同级文件夹下)

    3. 改动application/config.php中的例如以下參数:

    1 $config['index_page'] = "index.php";

    1 $config['index_page'] = ""; //设置为空

    以上三步。缺一不可。假设一切配置正常。你会发现,再次执行程序的时候。程序已经自己主动隐藏index.php这个URL段了!

    Trackback(UTF-8):http://www.cnSaturn.com/trackback/40


    CodeIgniter中开启PATH_INFO时mod_rewrite隐藏index.php的问题

    在CodeIgniter中,当我将URI寻址方式从AUTO更改为PATH_INFO时。即:

    $config['uri_protocol'] = 'PATH_INFO';

    注:PATH_INFO的开启。是由于我希望通过$_GET来取值,而不是系统默认的POST方式。

    在此情况下怎样仍然使用以上.htaccess方案,结果将是:index.php顺利隐藏,但主控制器并不能正确的获取值。

    解决方式例如以下,就一步:

    去掉下面重写规则中index.php后面的问号就可以。

     RewriteRule^(.*)$ /index.php?

    /$1[L]

    改动后的规则例如以下:

     RewriteRule^(.*)$ /index.php/$1 [L]

    其它地方不变。


    =============================================================================================================


    【其它】跟我学站点开发框架CodeIgniter之url篇

    怎样删除index.php文件

    预计非常多人学习CodeIgniter第一步想做的就是怎样去掉index.php,这个官方手冊就有相关教程,改动.htaccess 文件(前提是你的server是apache):

    RewriteEngine on

    RewriteCond $1 !^(index\.php|images|robots\.txt)

    RewriteRule ^(.*)$ /index.php/$1 [L]

    当然了。有非常多人依照要求改动了,可是却出现了错误,全部的訪问都404了,并且。这个404是apache的404页面。而不是CodeIgniter的404错误页面。

    出现这样的问题,是对apache的rewrite规则不理解:

    • 第一行、将RewriteEngine引擎设置为on,就是让url重写生效。
    • 第二行、配置url重写规则。!^(index\.php|images|robots\.txt) 这个正則表達式指明了哪些文件不须要重写,而是直接訪问;
    • 第三行、^(.*)$是一个正則表達式,意思是对全部请求都发送到/index.php/$1。熟悉url的人都知道,以反斜杠(/)开头的,都是相对路径,相对于谁呢?根,也就是网址。

    所以呢,假设CodeIgniter假设不是安装在站点的根文件夹,必定会出现错误。怎样解决呢,在CodeIgniter手冊中也给出了对应的解决方式:

    把上面最后一句改为:RewriteRule ^(.*)$ index.php/$1 [L]

    仅仅须要去掉index.php前面的斜杠即可。

    怎样加入url后缀

    通过上面的步骤。我们已经隐藏了index.php了,如今我们制作的站点更加的rest了。一般人已经无法一眼就看出你的站点是用CodeIgniter开发的,还是ROR开发的。

    可是,怎样在url后面添加后缀呢,这样,我们甚至能够隐藏或者伪造站点的开发语言,通过改动 config/config.php 文件,你能够为 CodeIgniter 生成的 URL 加入一个指定的文件后缀,比方你能够加入.html,甚至你能够加入.asp,.jsp。

    这样我们就能够将 http://www.hualai.net.cn/index.php/news/view/about 变成 http://www.hualai.net.cn/index.php/news/view/about.html。

    怎样使用查询字符串

    普通情况下我们不须要使用查询字符串,可是,总有一些特殊情况,是我们用CodeIgniter的rest模式无法完毕的,这样我们就须要在 URL 中使用查询字符串:

    index.php?c=products&m=view&id=345

    CodeIgniter 默认此功能是关闭的,假设想开启的话。打开配置文件 application/config/config.php 您能够看到例如以下内容:

    $config['enable_query_strings'] = FALSE;

    $config['controller_trigger'] = 'c'; //控制器名

    $config['function_trigger'] = 'm'; //方法名

    $config['directory_trigger']='d'; //控制器所在子文件夹名称

    假设你将 enable_query_strings 更改为 TRUE 。那么这个功能就被激活了。此时,你就能够通过keyword来调用须要的控制器和方法了:

    index.php?c=controller&m=method

    当我们在使用CodeIgniter当进行分页,这可以派上用场。


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 13:09 , Processed in 0.057995 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表