URL路由在MVC框架 - PHP
-
25-09-2019 - |
题
我从头开发在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]