【问题标题】:How does Code Igniter know that index.php is not a directory?Code Igniter 怎么知道 index.php 不是目录?
【发布时间】:2011-04-29 10:05:38
【问题描述】:

我的 Code Igniter 应用有这样的网址:

http://servername/contexttroot/index.php/Sessions/login/

我的问题是,当解析 url 时,Apache 如何知道没有名为 index.php 的文件夹?如果我是解析器,这就是我要寻找的东西:)

我知道它可以工作并且 CI 的 index.php 被调用,但我不明白它是如何工作的。也许点不允许作为目录名称的一部分?

更新有关详细信息,请参阅已接受问题上的 cmets,我要问的内容有很多详细信息。

【问题讨论】:

    标签: apache mod-rewrite codeigniter


    【解决方案1】:

    CodeIgniter 基本上通过在您的 URL 中搜索索引文件名“index.php”来执行 URL 的重写。在 CI 的配置文件中查找这一行:

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

    尝试将其更改为其他内容,看看它是否仍然有效。

    编辑:好的,回答 Juan 提出的问题,Apache 知道 index.php 不是目录的方式是因为文件和目录不能同名目录。如果 index.php 只是一个目录,Apache 会进入它并进一步搜索。如果是文件,就会运行文件。

    【讨论】:

    • 如果我没记错的话,带有. 的目录路径是无效的。同样,如果我没记错的话,HTTP 请求会将. 视为文件扩展名分隔符并忽略字母数字字符之后的所有内容(即第一个/ 之前的所有内容)。所以它到达index.,寻找文件扩展名php,看到/,然后停止寻找去哪里。如果您想完全删除 index.php 部分,则必须先访问 apache 重写中的 URL,然后才能访问 CI。
    • 嗯...用 dot.php 试试看它是否有效(我怀疑它会...目前正在尝试找到真正的答案)
    • @Juan 其实............我想我知道它是什么。我认为您不能在同一目录中拥有完全相同名称的文件和文件夹。因此,如果您有localhost/index.php/whatever.html,它将在本地主机中搜索名为 index.php 的文件或文件夹并打开/运行它。如果它是一个文件夹,它将打开它并进一步搜索。如果它是一个文件,它将运行它。
    • @Juan,浏览器没有进行任何测试。浏览器向服务器发送一个 http 请求,服务器获取 URL 并计算出如何处理它。 Apache 正在检查目录节点是文件还是目录。
    • @Juan 这是真的吗?我在几个项目中使用过 CI,但从未注意到这种行为。我认为href="hello.html"href="/hello.html 都会将您引导至 server/hello.html。我想浏览器至少会从服务器学习当前的基本路径,这样它就不会将hello.html 发送到/session/login/hello.html
    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2016-05-19
    • 2017-04-11
    • 2017-02-21
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多