.htaccess将请求路由到当前文件夹

时间:2014-07-22 02:42:30

标签: php apache .htaccess mod-rewrite url-rewriting

我正在编写一个自定义PHP框架,用于我的项目,并且我在加载CSS,JS和图像文件时遇到了一些问题。

以下代码位于我的.htaccess文件中 -

RewriteEngine On
#rewrite to base folder
RewriteBase /SimplexFramework/

#add trailing slashes
RewriteRule ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$ $1/ [NC,R=301,L]

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

如果路径没有指向文件,这基本上表明将请求重定向到index.php。

以下是我的目录结构。 CSS,JS文件夹存在于files下。 enter image description here

我的观看文件位于app/view,我通过路径加载CSS和JS文件 - files/css/style.cssfiles/js/script.js

当我在浏览器中的网址为http://localhost:8081/SimplexFramework/时,事情会按预期进行。

例如,当URL更改为http://localhost:8081/SimplexFramework/Users/login时,apache将无法再按预期找到文件。

在浏览器中,我看到以下请求 -

http://localhost:8081/SimplexFramework/User/register/files/js/scrits.js

我可以请求apache从我有.htaccess的文件夹中查找文件。与RewriteBase类似的东西?

1 个答案:

答案 0 :(得分:2)

如果您的内容中包含相对网址,则由浏览器决定如何加载它们。这与htaccess或重写规则有 nothing

假设浏览器加载此网址:http://localhost:8081/SimplexFramework/Users/login

在该页面的内容上,它会看到一个链接:<script src="files/js/scripts.js">

由于链接是相对的(不是以“http”或“/”开头),浏览器现在必须猜测相对URL基数是什么,并且它唯一需要处理的是URL。所以URL中的最后一个路径是“login”,它会删除它并使用basename作为URL基础,所以它得到:

http://localhost:8081/SimplexFramework/Users/files/js/scripts.js

这是100%的相对/绝对网址问题,与您的规则无关,与RewriteBase无关。这是因为您的链接是相对的,并且网址已从http://localhost:8081/SimplexFramework/更改为http://localhost:8081/SimplexFramework/some/stuff/that/eventually/gets/rewritten/

要解决此问题,请将您的网址设为绝对网址:<script src="/SimplexFramework/files/js/scripts.js">

或将正确的网址添加到网页标题中:

<base href="/SimplexFramework/" />