D 的个人博客

但行好事莫问前程

  menu
417 文章
3446695 浏览
6 当前访客
ღゝ◡╹)ノ❤️

Apache URL 重写小记

示例虚拟主机配置:

<VirtualHost *>
    ServerName me.test.net
    DocumentRoot /home/admin/build/test-htdocs/htdocs

    RewriteEngine on
    RewriteRule ^/$ /a/b/index.html [R,L]
    RewriteRule ^/([A-Za-z0-9]+)$ http://127.0.0.1/a/b/c?p=$1 [P,E=Host:me.test.net]
</VirtualHost>

配置了一个虚拟主机来进行对二级域名 me.test.net 的请求处理:

第 1 条重写规则

访问 me.test.net 的请求将重定向(R,302)到 http://me.test.net/a/b/index.html,并且
如果这条重写规则命中,则不再匹配后面的重写规则(L)。

第 2 条重写规则

访问 me.test.net/xxx 匹配正则(([A-Za-z0-9]+))的请求将被代理(P,同时必须已经启用 mod_proxy 模块)
到 http://127.0.0.1/a/b/c?p=xxx,E 表示设定环境变量 Host = me.test.net。

详细内容可参考

其中,以下细节需要注意:

  • [R,L] 重写规则标记分割符','前后不能有空格
  • [P] 强制代理模块处理时必须是一个有效的 URL,例如 http://hostname,
    且其中的 hostname 代理模块必须能够处理,上面的例子就是使用了环境变量 Host=me.test.net 进行了补充