【问题标题】:Apache Rewrite: directory tree to subdomain directoryApache Rewrite:目录树到子域目录
【发布时间】:2010-03-09 15:57:47
【问题描述】:

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

/var/www/sites/user1/cache

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

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

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

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

感谢任何帮助。

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    如果我正确读取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]

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-30
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        相关资源
        最近更新 更多