【问题标题】:Which alternatives do I have for developing a website navigation without .htaccess?在没有 .htaccess 的情况下开发网站导航有哪些替代方案?
【发布时间】:2009-12-21 14:30:47
【问题描述】:

理论上:几乎所有现代网站都是这样工作的:

somedomain.com/layer1/layer2/action

例如:

http://stackoverflow.com/questions/ask

通常这是通过 .htaccess 和 ModRewrite 引擎完成的。不久前,我偶然发现了一篇文章,该文章描述了一些来自 php 的内容。我已经不记得名字了。那段 PHP 代码知道当前打开的 URL。它能够知道调用什么域,调用什么 TLD,第一个目录是什么,第二个目录是什么,调用的文件是什么等。

我知道 Kohana 框架使用了这项技术,但不知道在哪里查看。有谁熟悉这个?

【问题讨论】:

    标签: php navigation


    【解决方案1】:

    您的意思是使用PATH_INFO 环境变量。 参见例如here

    如果无法访问 .htaccess 设置,但是使用此方法,您将始终在路径中拥有一个 filename.php

    www.domain.com/filename.php/questions/ask/
    

    【讨论】:

    • 有趣。哦,是的,我现在记得在我以前的 Kohana 时代,我必须在 .htaccess 中为这个 www.domain.com/filename.php/ 问题设置一个重写。那将是下一个问题:-)
    • 嗯……所以你想用 mod_rewrite 来解决你不使用 mod_rewrite 造成的问题吗?还是我完全误解了你所说的?
    • 是的,有点;) ...嗯,以编程方式处理它是有意义的。想象一个允许您创建导航层的框架。这就是我尝试做的。我认为在 PHP 中这样做比在 .htaccess 中搞乱更好。甚至不知道 PHP 是否可以读/写 .htaccess。当然,这也可能是一个解决方案,尽管我喜欢用 PHP 来做这件事。
    【解决方案2】:

    在大多数情况下,在 .htaccess 表面下发生的事情正是您要寻找的。在很多情况下,.htaccess 文件只是将任务委托给 index.php 文件,该文件本身准备处理传入的值,表示控制器、方法和参数。

    我不明白为什么您不能简单地创建自己的 .php 文件来解析 url 并从那里处理值。不过,您只需在所有 url 中使用该 .php 文件作为您的基础:

    www.mysite.com/index.php/controller/method/parameter1/parameter2
    

    【讨论】:

      【解决方案3】:

      您可以使用 apache 的错误文档,但这只是一个 hack(重写也是如此),而不是一个干净的解决方案。

      【讨论】:

      • 更具体一点:写入您的 .htaccess 文件 ErrorDocument 404 /index.php(假设您位于文档根目录中)。这会将所有 404 错误重定向到您的 index.php。
      • -1 有什么用?我想给出完全相同的分析器!
      • 我没有 -1,但这是否意味着您将向所有人返回错误状态 404?这不是个坏主意吗?
      • 我认为 Jonathan Sampsons 的回答是正确的方法,尤其是因为(正如您所建议的)触发 404 来处理 URL 是一种黑客行为,并不是实现预期结果的聪明方法。跨度>
      • @Dominic 是的,只是看你的错误日志爆炸:D,我不确定你是否可以在 PHP 中设置一个 201 标头来强制它以正确的状态码响应......仍然,一个达到预期结果的糟糕方法。
      【解决方案4】:

      您可以使用 HTTP 标头的组合,但这些在某些 Web 服务器上可能不可靠。要查看服务器上可用的 HTTP 标头,请使用以下内容创建一个页面:

      <?php phpinfo(); ?>
      

      查找 PHP 变量部分,特别是这些是您可能使用的部分:

      _SERVER["HTTP_HOST"]
      _SERVER["SCRIPT_NAME"]
      

      【讨论】:

        【解决方案5】:

        看看Front controller pattern

        基本上,您将所有请求重定向到一个 PHP 文件,该文件对 URL 进行解码并决定下一步操作。

        顺便说一句,这不是 PHP 特定的。

        【讨论】:

          猜你喜欢
          • 2016-01-25
          • 2021-01-16
          • 2010-10-15
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多