我从头开发在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,我排到网站的正确部分,但所有的链接不工作。难道浏览器认为我是在不同的文件夹?

我想能够使用相对路径对所有在我的网站的内容,否则我需要使用绝对路径,处处以确保事情会出现。这是可能的?

有帮助吗?

解决方案

您需要绝对路径,因为浏览器评估相对于当前的请求URI的相对路径(除非使用碱标签,见下文)。你要知道,虽然是一个绝对路径并不necesseraly意味着你需要在它的域名。简单地以斜杠开始就足够了。这是相对于服务器的绝对路径,可以这么说。

所以:

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

在代替

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

...会工作得很好。

正如我mentiond,另一种方法将是使用基标记 。但我不记得现在的原因,我认为建议不使用它。 (如果任何人想附和这里...)

其他提示

IMO图像,JavaScript,样式和其他静态内容应的的是路由系统的一部分。这意味着你加载PHP为每个请求(性能重击),当阿帕奇可以成为这些文件就好了。

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

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top