zoukankan      html  css  js  c++  java
  • ***CodeIgnite/CI 去掉 index.php的 配置

    CI有效删除URL中的index.php

    参考:

    http://codeigniter.org.cn/forums/thread-15444-1-1.html

    读CI的使用手册的话,关于如何有效删除URL中index.php以使URL看起来更友好美观的问题,可能是你面对的第一个较为复杂的问题!本贴不是原创,而是一个各种意见的综合!但本帖提出的解决方案可以有效解决Apache和IIS两种环境下的配置问题,同时也可以有效,避免部分虚拟LINUX虚拟主机上可能出现的no input file specified错误!如果你还在为index.php的问题而苦苦寻觅解决方案,或许这里会是你的最后一站!
                                                                            

    官方解决方案

    默认情况下,index.php 文件将被包含在你的 URL 中:
    example.com/index.php/news/article/my_article
    你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:
    HTML复制代码
    RewriteEngine on
    RewriteCond $1 !^(index.php|images|robots.txt)
    RewriteRule ^(.*)$ /index.php/$1 [L]
    复制代码

    注意:如果你的项目不在根目录请把上面这一句改为:RewriteRule ^(.*)$ index.php/$1 [L]
    在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。

    我的终极解决方案但在实践中,以上方案仅适用于与运行于Apache环境下的服务器且并不具有充分的普遍适用性!当CI程序位于非根目录或位于某些虚拟主机上时,以上解决方案会引起”404错误”或”no input file specified”等错误.百度参考过相关问题的解放方案后,找到了一种具有通用性的有效删除URL路径中index.php的方法,代码参考如下:
    index位于根目录时,你可以在index.php所在的根目录里新建.htaccess文件并使用以下代码:

    HTML复制代码
    RewriteEngine on
    RewriteCond $1 !^(index.php|robots.txt)
    RewriteRule ^(.*)$ /index.php?/$1 [L]
    复制代码


    当index.php不在根目录时,你可以在index.php所在目录里新建.htaccess文件并使用以下代码:

    HTML复制代码
    RewriteEngine on
    RewriteCond $1 !^(index.php|images|robots.txt)
    RewriteRule ^(.*)$ /path_to_app/index.php?/$1 [L]
    复制代码


    注意把path_to_app换成你的index.php所在文件的目录.假设你的index.php放在根目录的tool子文件夹下,你可以这样写:

    HTML复制代码
    RewriteEngine on
    RewriteCond $1 !^(index.php|images|robots.txt)
    RewriteRule ^(.*)$ /tool/index.php?/$1 [L]
    复制代码


    以上方案应该可以解决Apache环境下如何有效删除URL中index.php的问题,如果有其他问题,请评论或留言并留下一个有效的联系方式.我会尝试替您解决并将可能的解决方案及时通知您!
    另外,关于IIS环境下如何有效删除URL中的index.php,可以参考这篇文章:
    IIS7.5 去除 index.php web.config配置文件参考文章:如何删除url中index-php的终极解决方案


    CodeIgnite/CI 去掉 index.php的 配置

    A. .htaccess文件必须放在CI的根目录下和index.php文件在同一目录。

    (加载后,我出现过问题!css和js不能正常加载!后来才发现需要定义|js|css)

    .htaccess 文件的内容如下:

    RewriteEngine on

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

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

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

    //CI203为目录,如果ci直接放在根目录。路径就是/index.php/$1 [L]

    有朋友对我上面的设置做出了更正。可以参考下。

    RewriteEngine on

    RewriteBase /ci213new

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

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

    B.在apache配置上,注意httpd.conf文件里:

    1、//开启rewrite

    LoadModule rewrite_module modules/mod_rewrite.so

    2、//开启 .htaccess

    Options FollowSymLinks

    AllowOverride All

    Order allow,deny

    Allow from all

    另外,注意几个文件:

    applicationconfig outes.php—这个文件设置初始加载的默认控制器文件(controller)

    applicationconfigconfig.php—这个文件设置初始配置,但是,自打我去掉index.php后,$config['index_page'] = ‘index.php’;–这个貌似不再起作用了。为空也木事。。。


    在config.php配置文件中,将index_page设置为空,可以影响site_url函数

    site_url([$uri = ''[, $protocol = NULL]])

    参数:
    • $uri (string) -- URI string
    • $protocol (string) -- Protocol, e.g. 'http' or 'https'
    返回:

    Site URL

    返回类型:

    string

    根据配置文件返回你的站点 URL 。index.php (获取其他你在配置文件中设置的 index_page 参数) 将会包含在你的 URL 中,另外再加上你传给函数的 URI 参数,以及配置文件中设置的 url_suffix 参数。

    推荐在任何时候都使用这种方法来生成你的 URL ,这样在你的 URL 变动时你的代码将具有可移植性。

    传给函数的 URI 段参数可以是一个字符串,也可以是个数组,下面是字符串的例子:

    echo site_url('news/local/123');
    

    上例将返回类似于:http://example.com/index.php/news/local/123

    下面是使用数组的例子:

    $segments = array('news', 'local', '123');
    echo site_url($segments);
    

    该函数是 CI_Config::site_url() 的别名,更多信息请查阅 配置类 文档。

  • 相关阅读:
    Best Cow Fences_二分&&DP
    Palindrome_滚动数组&&DP
    Making the Grade_滚动数组&&dp
    BUY LOW, BUY LOWER_最长下降子序列
    Testing the CATCHER_DP
    Best Sequence_DFS&&KMp
    (Your)((Term)((Project)))
    [SOJ] 畅通工程续
    [SOJ] 商人的宣传
    [SOJ] 无路可逃?
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4975650.html
Copyright © 2011-2022 走看看