0

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

请求是这样的:

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,我会被路由到站点的正确部分,但所有链接都不起作用。浏览器是否认为我在不同的文件夹中?

我希望能够对我网站中的所有内容使用相对路径,因为否则我需要在任何地方使用绝对路径来确保事情会出现。这可能吗?

4

2 回答 2

2

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

所以:

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

代替

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

...会工作得很好。

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

于 2010-04-07T23:19:55.797 回答
0

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

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

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
于 2010-04-07T23:17:53.243 回答