如何使用htaccess将请求文件重定向到真实文件夹?

时间:2015-10-22 12:36:40

标签: html css .htaccess mod-rewrite

我有什么

我在服务器中创建了一个名为“ r ”的文件夹,我已将所有css,js和图像放入其中,并附带相应的子文件夹。

E.g:

/
|public_html
           |r
             |styles
             |js
             |img

我想要什么

发送救援文件呼叫的网页和样式表必须具有以下模式:“resources /(.+)".

E.g。

在html文档<script src="resources/js/jquery.js"></script>

在css文档@import url('resources/css/fontawesome/css/font-awesome.min.css');

我做了什么

我尝试使用Alias和AliasMatch在public_html中设置.htaccess文件(因为服务器需要在其中发布网站),但服务器捕获了内部错误。

然后我尝试使用RewriteRule使用绝对路径和相对路径,如下所示:

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^resources/(.*)$ r/$1

真实发生的事情

它工作了一半!

来自根域(www.example.com)的请求已正确加载,但是从加载的样式表中加载。

E.g。

index.html请求resources/styles/home.css并且有效;

home.css请求resource/img/bg.png并且不起作用。

在网络检查器中,显示的请求为http://www.example.com/resources/styles/resources/img/bg.png 而且看起来没有RewriteRule。

最终

如何解决此问题?并且,请逐步解释答案,以便我能更好地理解我的错误。

1 个答案:

答案 0 :(得分:0)

你的重写规则工作得很好。问题是你正在使用相对路径。相对于resources/styles/home.css的{​​{1}}为www.example.com。但是,相对于www.example.com/resources/styles/home.css的{​​{1}}为resource/img/bg.png。此路径解析在浏览器中发生,您的重写规则与它完全无关。

修复CSS文件和其他相关引用以指向正确的文件。在CSS文件中,您应指向www.example.com/resources/styles/home.csswww.example.com/resources/styles/resources/img/bg.png