2014-09-02 88 views
1

又来了一个问题,因为我目前的解决方案是不是真的满足了我对以下问题的HTML资源:我有在开发MVC模式的自己的PHP框架办法避免的Apache别名路径包括像CSS

。而我的路由器工作完美,所有,但我有一个问题,我找不到解决方案。

那么我路由每个传入的请求index.php文件位于我的框架的基路径。 Ofcourse这是没有问题的,包括CSS时,如用相对路径的工作:

<link rel="stylesheet" type="text/css" href="style/include/css/style.css" /> 

这个工程在浏览器中完美。当然,我在URL中输入的内容并不重要,因为每个请求都会按照上述方式重定向到索引,从而使合理的路由成为可能。

但是,当我的网址包含多个类似子文件夹的斜杠时,例如:“/ manual/details/1_2”,我得到一个正常的路由过程,但浏览器找不到css文件,除非我添加“../”为我的网址中的每个“/”映射回我的基路径。

例如,对于上面的网址,这将工作,而不是:

<link rel="stylesheet" type="text/css" href="../../style/include/css/style.css" /> 

我CURENT解决方案:

我写在我的路由类中的PHP函数,确定所需要的量“../”模式,并且我总是在实施资源之前投入该功能,以便随时建立精确的 路径。

例子:

<link rel="stylesheet" type="text/css" href="<?=Router::getInstance()->getSubdirectoryPrefix()?>style/include/css/style.css" /> 

不用说,这是非常不方便,也如果你忘记将这个函数很烂。如果你的路线改变了,或者你忘记了你在一个子目录中,你会想知道为什么你的资源找不到。

我也知道如何在Alias的虚拟主机配置中添加一个别名,例如Alias/public style /,但我想找到另一个 - 项目和PHP内部方式,而没有一个不方便的废话,比如粘贴别名函数all这个时间并且没有设置虚拟主机选项,所以框架可以保持轻量级,并且不需要任何讨厌的外部选项,比如修改虚拟主机。

我很想听听您的解决方案,最好是.htacces - OH中,在它说话时,我在这里留下我的.htaccess代码藏汉:

RewriteEngine On 

Options -Indexes 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php [L] 

在此先感谢您的帮助〜

回答

1

您必须使用绝对路径而不是相对您的html链接(CSS,JavaScript,图像等)的路径。

例如:

<link rel="stylesheet" type="text/css" href="/style/include/css/style.css" /> 

领先斜线(前style)是指从文档根目录文件夹开始,然后进入style文件夹,等等...(如果它不在根文件夹中,可能会有另一个前缀目录)

由于某些规则可以创建虚拟目录(例如:http://domain.com/some/directory/subdirectory/etc/),所以存在一些问题。

而且,在你的htaccess的,它不会伤害到使用前导斜杠(或RewriteBase

Options -Indexes 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* /index.php [L] 

或(两者是相同的)

Options -Indexes 

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php [L] 
+1

大声笑,这是太容易...非常感谢这很像一个魅力! – Steini 2014-09-03 08:38:15