Apache重写到文件系统或代理

时间:2015-06-18 19:50:48

标签: apache mod-rewrite

我想创建一个Apache mod_rewrite规则来执行两件事

  1. 在请求/file-system-target
  2. 时提供文件系统目录的内容
  3. 代理,只要未请求/file-system-target
  4. E.g:

    RewriteRule ^/file-system-target /path/to/file/system/target [L]
    RewriteRule ^/(.*) http://localhost:8080 [P]
    

    但是,在观看RewriteLog的输出时,后一条规则始终匹配且前者永远不匹配。我错过了什么?

1 个答案:

答案 0 :(得分:0)

事实证明,声明“后一条规则始终匹配&前者永远不匹配”可能不是真的;我有一个令人困惑的httpd.conf,其中在多个地方启用了重写日志记录。

无论如何,第一条规则绝对不完整。它应该是这样的:

RewriteRule ^/file-system-target(.+)$ /path/to/file/system/target/$1 [L]

我还添加了一个额外的规则来处理(缺少)尾部斜杠:

RewriteRule ^/file-system-target$ /path/to/file/system/target/$1 [L]

所以我最终得到了:

RewriteRule ^/file-system-target$ /path/to/file/system/target/$1 [L]
RewriteRule ^/file-system-target(.+)$ /path/to/file/system/target/$1 [L]
RewriteRule ^/(.*) http://localhost:8080 [P]

我将假设有更优雅的方式来实现此功能,但我对上述配置足够满意,可以将此任务称为“完成”。