【问题标题】:How can a URL like http://localhost/index.php/articles/edit/1/my-first-article work without an .htaccess?如果没有 .htaccess,像 http://localhost/index.php/articles/edit/1/my-first-article 这样的 URL 如何工作?
【发布时间】:2010-11-01 07:14:39
【问题描述】:

我不明白:

http://localhost/index.php/articles/edit/1/my-first-article

Kohana framework documentation 中提到了此 URL 作为示例。我在我的安装文件中四处寻找,除了我自己的文件之外没有 .htaccess 与此无关。

那么,怎么可能调用了 index.php,但是作为参数,这些东西看起来像是在 URL 中添加了目录?这看起来并不“真实”。

或者这就是原生 PHP/Apache/HTTP 的实际工作方式?据我了解, / 总是告诉“嘿,一个目录!”。对我来说真的是零意义……这怎么可能?还是他们在某个地方有我无法看到/找不到的 .htaccess?

【问题讨论】:

    标签: php .htaccess kohana pathinfo


    【解决方案1】:

    来自Apache docs

    AcceptPathInfo 指令

    该指令控制是否 包含尾随的请求 后面的路径名信息 实际文件名(或不存在的文件 在现有目录中)将是 接受或拒绝。尾随 可以制作路径名信息 可用于 PATH_INFO 中的脚本 环境变量。

    例如,假设位置 /test/ 指向一个目录 仅包含单个文件 这里.html。然后请求 /test/here.html/more 和 /test/nothere.html/more 都收集 /more 为 PATH_INFO。

    所以我假设这个设置在 httpd.conf 中的某个地方启用。请注意,这与 mod_rewrite 一样,可以在多个位置启用/配置 - see here

    【讨论】:

      【解决方案2】:

      在 PHP 中,您可以使用 $_SERVER["PATH_INFO"] 变量获取文件名之后的数据。这允许您基本上 GET 信息而不必使用 GET 变量,这意味着 Google 和 co 会认为您使用的是静态页面。这基本上是mod_rewrite 的替代方案,后者通常启用,而mod_rewrite 通常不启用。

      这对您来说可能很明显,但对我来说并不是很明显,除非您使用文件名,否则这在索引页面上无法正常工作。例如,http://example.com/test/my/get/params 将不起作用,而 http://example.com/test/index.php/my/get/params 将。

      【讨论】:

        【解决方案3】:

        AcceptPathInfo 已为您的服务器开启。 :)

        【讨论】:

          【解决方案4】:

          我没有使用 Kohana,所以我不知道我的方法是否有用,但是当服务器不支持 .htaccess 文件(或重写规则)时,我的“框架”会生成如下所示的 URI:

          http://www.domain.com/?/articles/edit/1/my-first-article(注意?)

          这是Frog框架使用的类似方法,只是解析$_SERVER['REQUEST_URI'](或Windows服务器上的$_SERVER['HTTP-X-REWRITE-URL'])并在'/'上爆炸。

          这种方法完全独立于重写,并且仍然生成或多或少对 SEO 友好的 URI

          希望对你有用。

          【讨论】:

            【解决方案5】:

            这里可能不是这样,当然不推荐,也可能不是正确的答案...

            但是...

            我见过人们使用 404 页面来解析请求,然后在正确的页面中包含该信息。

            【讨论】:

              【解决方案6】:

              请参阅CGI Environment Variables 中的 PATH_INFO。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2010-12-20
                • 2011-01-29
                • 2014-01-22
                • 1970-01-01
                • 2015-04-07
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多