【问题标题】:Apache/PHP confuses dir name and script filename?Apache/PHP 混淆目录名和脚本文件名?
【发布时间】:2013-01-18 19:56:05
【问题描述】:

为什么像http://192.168.1.116/wordpress/wp-content/themes/bktf/frameworks/back-end/theme-options/options/fields/font/field_font.js.php?ver=1358535557这样的网址

...最终为/wordpress/wp-content/themes/bktf/frameworks/back-end/theme-options.php/options/fields/font/field_font.js.php 提供服务(这也是`$_SERVER['PHP_SELF'] 的内容)。

...在同一 back-end 父目录中同时具有目录名称 theme-options 和文件名称 theme-options.php 的情况下?

另外,$_SERVER['SCRIPT_NAME'] 的内容是/wordpress/wp-content/themes/bktf/frameworks/back-end/theme-options.php

为什么 Apache 或 PHP 模块会自动在目录名末尾添加.php 只是因为有一个与 dir 相同的脚本???

注意:我在 Ubuntu 12LTS 服务器上使用 Apache 和 PHP 的默认配置,通过 tasksel 安装,然后使用 https://launchpad.net/~ondrej/+archive/php5 PPA 升级到 PHP 5.4,所有配置文件大多与默认值/示例相同 - 它是一个基本的 LAMP 服务器,旨在在 VM 中运行以用于开发目的。

【问题讨论】:

    标签: php apache lamp apache-config


    【解决方案1】:

    PHP_SELF 指的是服务器上正在运行的文件,而不是当前的 url。阅读 PHP $_SERVER 手册了解更多信息:http://php.net/manual/en/reserved.variables.server.php

    改用$_SERVER['REQUEST_URI']。这将在最后为您提供查询字符串。

    【讨论】:

    • 我知道!这就是重点,在服务器上运行的文件 $_SERVER['PHP_SELF'] 在它的路径中有 .../theme-options.php/... 而 URL 有 .../theme-options/...。服务器只是在 URL 中的目录名称中添加了一个“.php”,只是因为有一个与该目录同名的脚本!我对此的唯一反应是L WhyTF?!
    • 脚本有效吗?还是这导致它失败?我知道 wordpress 有处理文件与目录的 htaccess 规则。这可能就是重定向发生的地方。
    • 不,没有 .htaccess 所以它似乎不是重定向问题......我在谷歌搜索后发现的唯一相关内容是 wiki.apache.org/httpd/DirectoryAsScript 但它似乎并不适用我的问题...
    • Hrm...通常wordpress会生成一个htaccess文件,它是否被隐藏了? (以 . 开头的文件通常默认隐藏)
    • 不,没有 .htaccess 文件...但我知道发生了什么...抱歉问题中描述问题的“复杂”方式
    【解决方案2】:

    PHP_SELF = 当前执行脚本的文件名,相对于文档根目录。 SCRIPT_NAME = 当前脚本的路径。

    【讨论】:

    • 查看对 Eric 回答的评论...也许我的问题措辞有点尴尬,但我的问题不在于 $_SERVER 变量,而在于服务器提供带有 GET 参数的脚本而不是跟随URL 中的目录...
    【解决方案3】:

    好的,我的问题有点混乱,所以我可以理解为什么每个人回答的问题都和我问的不同。

    无论如何,在我的情况下发生的事情是 没有theme-options dir(重命名并忘记了)并且 Apache 将诸如 /[...]/theme-options/[...] 之类的请求翻译为 /[...]/theme-options.php/[...],因为有一个 @ 987654324@ 脚本.

    我仍然不知道为什么带有所有默认配置的 Ubuntu LAMP 设置会出现这种奇怪的路径杂耍,但我解决了我的直接问题。

    【讨论】:

      【解决方案4】:

      由于启用了 MultiViews 选项,Apache 将请求转换为具有扩展名的特定文件:http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html#multiviews

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多