.htaccess - 重写url请求并处理资源文件

时间:2014-03-19 21:16:35

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

我想我应该为与我之前相关的问题打开一个新问题(你可以找到它here)。情况与那个问题非常相似,但我发现了一种不同的方法,并且想知道它是否正确。

我想重写我的网站的网址,并能够处理资源文件(css,js,图像等),以便浏览器不会在错误的目录中搜索它们。

以下是示例页面的html代码片段,例如浏览到articles/writer/erenor(此处htaccess将网址重写为/articles.php?writer=erenor,此部分效果很好)。

加入<head>代码:

<script type="text/javascript" src="./inc-javascript-files/jquery.js"></script>

<style type="text/css">
  @import url(./inc-css-files/index.css);
</style>

加入<body>代码:

<img alt="Avatar" src="./inc-images-files/avatar.png">
<img alt="Pattern" src="./inc-images-files/pattern/violet.png">
<br><br>
<a href="/articles/writer/erenor">Writer Erenor</a>

现在,我有.htaccess文件的这个片段:

# take care of resource files
RewriteRule inc\-(css|javascript|images)\-files/(.*)\.(png|jp[e]g|gif|js|css) includes-$1/$2.$3 [L]

# url rewriting
RewriteRule ^articles/writer/(\w*)/?$ articles.php?writer=$1

最后,文件结构的例子:

/mysite
/mysite/.htaccess    //this is the htaccess file we are talking about ;-)
/mysite/articles.php
/mysite/includes-css
/mysite/includes-css/index.css
/mysite/includes-javascript
/mysite/includes-javascript/jquery.js
/mysite/includes-images
/mysite/includes-images/avatar.png
/mysite/includes-images/pattern
/mysite/includes-images/pattern/violet.png

我刚刚测试了代码,它似乎工作:我的浏览器要求输入css文件(在“错误”位置搜索)并正确检索它,所以我很满意它:) 页面中的链接将类似于上面显示的html中的链接,这似乎运作良好。

问题: 1.这是一种很好的方法,可以避免浏览器对资源处于“错误”位置的请求吗? (我知道,当涉及到其他文件时,我将不得不添加更多参数,例如视频,txt,tga等等) 2.我应该将此站点移动到生产服务器,它是否可以不加修改地工作?换句话说,这是一种可以在这里和那里轻松移动的“盒子”吗?

一点注意事项:因为这些只是代码片段,请告诉我是否有东西似乎丢失了......可能我只是忘了复制/粘贴它; - )

1 个答案:

答案 0 :(得分:0)

您似乎在请求当前目录中的文件。你为什么那样做?你为什么不从网站root请求? (除掉 '。')。如果我在/articles/writer/asdf/articles/writer/zxcv上正确阅读,则文件会请求/articles/writer/asdf/inc-css-files/index.css/articles/writer/zxcv/inc-css-files/index.css。浏览器将此视为两个不同的文件。如果用户请求100个编写器,它将下载index.css 100次,并以不同的名称缓存相同的文件100次。这很浪费。

如果您将文件存储在站点根目录的文件夹中,我建议请求相对于站点根目录的文件。