【发布时间】:2014-10-27 03:08:30
【问题描述】:
这里有一个问题,因为我目前的解决方案对于以下问题并不真正让我满意:
我有一个自己的带有 MVC 模式的 PHP 框架正在开发中。而且我的路由器运行良好,但我有一个问题我找不到解决方案。
我将每个传入请求路由到位于我的框架的基本路径中的 index.php 文件。当然,在包含 css 时使用相对路径是没有问题的,例如:
<link rel="stylesheet" type="text/css" href="style/include/css/style.css" />
这在浏览器中完美运行。当然,我在 URL 中输入什么并不重要,因为每个请求都会按上述方式重定向到索引,以使合理的路由成为可能。
但是,当我的 url 包含多个看起来像子文件夹的斜杠时,例如:“/manual/details/1_2”然后我得到一个正常的路由过程,但浏览器找不到 css 文件,除非我添加“../”我的网址中的每个“/”都向后映射到我的基本路径。
例如,对于上面的 URL,这将起作用:
<link rel="stylesheet" type="text/css" href="../../style/include/css/style.css" />
我目前的解决方案:
我在我的 Routing 类中编写了一个 PHP 函数,用于确定所需的“../”模式数量,并且我总是在实现资源之前强制转换函数以构建确切的 任何时候的路径。
例子:
<link rel="stylesheet" type="text/css" href="<?=Router::getInstance()->getSubdirectoryPrefix()?>style/include/css/style.css" />
不用说,这很不方便,如果您忘记放置该功能,也会很糟糕。如果您的路线发生变化,或者您忘记了您在子目录中,您会想知道为什么找不到您的资源。
我也知道在我的 Apache 虚拟主机配置中放置一个别名,例如 Alias /public style/,但我想找到另一个 - 项目和 PHP 内部方式,而不会出现不方便的废话,例如将别名函数全部粘贴到无需设置虚拟主机选项,因此框架可以保持轻量级,并且不需要任何讨厌的外部选项,例如修改虚拟主机。
我很想听听您的解决方案,最好是 .htacces - 哦,通过讨论,我也将我的 .htaccess 代码留在这里:
RewriteEngine On
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
提前感谢您的帮助~
【问题讨论】:
标签: php html apache mod-rewrite