You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于模式的Apache重定向规则:子域名点转横杠跳转需求

Apache VirtualHost 子域名重定向配置

需求说明

将所有*.admin.example.com格式的请求重定向到*-admin.example.com,替换子域名中的点为横杠,同时完整保留原URL的路径、查询参数等内容。例如:

  • abc.def.admin.example.com/path?foo=bar → abc-def-admin.example.com/path?foo=bar
  • test.admin.example.com → test-admin.example.com

配置方案(Apache 2.4+)

  1. 确保启用mod_rewrite模块

    • Debian/Ubuntu系统执行:sudo a2enmod rewrite,然后重启Apache:sudo systemctl restart apache2
    • CentOS/RHEL系统检查模块状态:httpd -M | grep rewrite,若未启用则编辑httpd.conf添加LoadModule rewrite_module modules/mod_rewrite.so,再重启服务:sudo systemctl restart httpd
  2. 编辑VirtualHost配置
    在对应的虚拟主机配置块中添加以下规则:

    <VirtualHost *:80>
        ServerName admin.example.com
        ServerAlias *.admin.example.com
    
        # 启用重写引擎
        RewriteEngine On
    
        # 匹配子域名并替换点为横杠后重定向
        RewriteCond %{HTTP_HOST} ^(.*)\.admin\.example\.com$ [NC]
        RewriteRule ^(.*)$ http://${join:-|%split:.|%1}-admin.example.com$1 [R=301,L]
    </VirtualHost>
    

规则解释

  • ServerAlias *.admin.example.com:匹配所有以admin.example.com结尾的子域名请求
  • RewriteCond %{HTTP_HOST} ^(.*)\.admin\.example\.com$ [NC]:捕获admin.example.com前缀的子域名部分(如abc.def),[NC]表示不区分大小写
  • ${split:.|%1}:将捕获的子域名按点分割为字符串数组
  • ${join:-|...}:将分割后的数组用横杠拼接成新的前缀
  • [R=301,L]:发送301永久重定向响应,L表示终止后续重写规则处理

HTTPS适配

若使用HTTPS,将虚拟主机端口改为*:443,并添加SSL相关配置:

<VirtualHost *:443>
    ServerName admin.example.com
    ServerAlias *.admin.example.com

    SSLEngine On
    SSLCertificateFile /path/to/your/cert.pem
    SSLCertificateKeyFile /path/to/your/key.pem

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.*)\.admin\.example\.com$ [NC]
    RewriteRule ^(.*)$ https://${join:-|%split:.|%1}-admin.example.com$1 [R=301,L]
</VirtualHost>

注意事项

  • 测试前请清除浏览器缓存,避免301重定向缓存影响结果
  • 若使用Apache 2.2及以下版本,split和join函数不支持,需改用循环替换的方式处理点:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.*)\.admin\.example\.com$ [NC]
    # 循环替换子域名中的所有点为横杠
    RewriteCond %1 ^(.*)\.(.*)$
    RewriteRule ^(.*)$ http://%1-%2-admin.example.com$1 [R=301,L,E=NEW_HOST:%1-%2]
    RewriteCond %{ENV:NEW_HOST} ^(.*)\.(.*)$
    RewriteRule ^(.*)$ http://%1-%2-admin.example.com$1 [R=301,L,E=NEW_HOST:%1-%2]
    
    注:此方法仅能处理有限数量的点,若子域名中点的数量较多,建议升级Apache版本。

内容的提问来源于stack exchange,提问作者Kharbat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:57:19