Apache Rewrite:目录树到子域目录

时间:2010-03-09 15:57:48

标签: apache mod-rewrite

我有一个Web应用程序,其中包含50个以上客户端使用的一组文件,每个站点的所有配置都来自各自目录中的config.php文件。这是通过PHP解析URL来完成的。所有这一切都很好,只是客户端可以做的自定义上传文档有问题,并且位于

的/ var / WWW /站点/用户1 /高速缓存

可以有多个子目录。所以请求时 http://user1.site.com/cache/subdir1/image.jpg 需要阅读 /var/www/sites/user1/cache/subdir1/image.jpg

允许客户端上传任何文件类型,因此我只需要重写以获取任何/缓存请求,然后获取子域并指向正确的目录。

想出了这个,但我仍然得到一个无效页面

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^\.]+)\.site\.com$
RewriteRule ^cache/(.*)$ /sites/%1/cache/$1 [L]

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果我正确读取the RewriteRule documentation,L标志本身会生成内部重定向,这意味着替换将被解释为本地文件系统路径。

尝试使用完整路径:

RewriteRule ^cache/(.*)$ /var/www/sites/%1/cache/$1 [L]

或执行外部重定向(使用HTTP返回状态“302 MOVED TEMPORARILY”),让用户的浏览器使用新路径重新发送请求:

RewriteRule ^cache/(.*)$ /sites/%1/cache/$1 [L,R]

答案 1 :(得分:0)

/ var / www /是文件系统上文件的位置。我是基于文档根路由,所以我不需要把它放在那里。但我意识到我错过了/ cache /上的前导斜杠。虽然你的回答并不是我想要的,但它让我看到了我所缺少的东西。感谢。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^\.]+)\.site\.com$
RewriteRule ^/cache/(.*)$ /sites/%1/cache/$1 [L]