【问题标题】:URL routing in an MVC framework - PHPMVC 框架中的 URL 路由 - PHP
【发布时间】:2011-02-05 11:51:46
【问题描述】:

我正在从头开始用 PHP 开发一个 MVC 框架;主要是为了学习经验,但这很容易在现场项目中结束。我以tutorial 为基础,并从那里扩展。

请求是这样发出的:

examplesite.com/controller/action/param1/param2/ 等等...

这是我的 .htaccess 文件:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

所以所有请求都会转到 index.php,然后它们会从那里路由到正确的控制器和操作。如果没有给定控制器或动作,则假定两者都使用默认的“索引”。

我有一个带有索引操作的索引控制器,它应该是我网站的主页。我可以通过 examplesite.com 访问它(因为假定索引部分)。它有一些图像、指向样式表的链接和一些脚本。它们与相对于 index.php 的路径链接。我认为这很好,因为所有请求都转到 index.php 并且所有内容都使用 php 简单地包含在此页面中。如果我访问 examplesite.com,这将有效。我将看到所有图像和样式,并且脚本将运行。 但是,如果我访问 examplesite.com/index,我会被路由到站点的正确部分,但所有链接都不起作用。浏览器是否认为我在不同的文件夹中?

我希望能够对我网站中的所有内容使用相对路径,否则我需要在任何地方都使用绝对路径来确保显示内容。这可能吗?

【问题讨论】:

    标签: php model-view-controller url browser segment


    【解决方案1】:

    您需要一个绝对路径,因为浏览器会评估相对于当前请求 uri 的相对路径(除非您使用 base 标记,请参见下文)。请注意,绝对路径并不一定意味着您需要在其中包含域名。只需从正斜杠开始就足够了。可以说,它是相对于服务器的绝对路径。

    所以:

    <img src="/images/bla.gif">

    代替

    <img src="images/bla.gif">

    ...会正常工作的。

    正如我所提到的,另一种方法是使用base tag。但是由于我现在不记得的原因,我相信建议不要使用它。 (如果有人想在这里插话……)

    【讨论】:

    • 是的。这就是我一直在做的,虽然我不熟悉 标签。我得看看这个词是什么。
    • 但是现在我们如何在 localhost 上运行多个网站呢?
    • @Walderman 我听说在某些固定框架中使用基本标签会出现问题,具体取决于设置。使用基本标签很好,特别是如果你控制世界。
    【解决方案2】:

    IMO 图像、javascript、样式和其他静态内容不应成为路由系统的一部分。这意味着当 Apache 可以很好地提供这些文件时,您会为每个请求加载 PHP(性能问题)。

    我的 .htaccess 总是让现有文件跳过 PHP:

    # Files with an extension that exist are served up straight.
    RewriteCond %{REQUEST_URI} \..+$
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .* - [L]
    

    【讨论】:

    • 我的系统没有路由这些东西。他们提供普通的旧文件。
    • 逻辑和创意不错,但没必要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    相关资源
    最近更新 更多