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

如何在Apache的.htaccess中实现带指定后缀的子域名URL重写

解决api子域名的RESTful API重写需求

咱们先理清楚你的核心诉求:在api.mysite.com子域名下,把以app/、images/、lib/开头的请求,分别转发到服务器根目录的/assets/api/app/index.php、/assets/api/images/index.php、/assets/api/libs/index.php,并且只传递前缀后的纯路径部分(比如/carts、/banner/21)给对应的处理文件。

下面是调整后的服务器根目录.htaccess完整配置,完全匹配你的需求:

RewriteEngine On
RewriteBase /

# 优先放行已存在的静态资源(文件、目录、符号链接),避免重写拦截
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

# 仅对api子域名的请求应用后续重写规则
RewriteCond %{HTTP_HOST} ^api\. [NC]

# 处理app前缀请求:api.mysite.com/app/carts → /assets/api/app/index.php?path=/carts
RewriteRule ^app/(.*)$ /assets/api/app/index.php?path=/$1 [L,NC,QSA]

# 处理images前缀请求:api.mysite.com/images/banner/21 → /assets/api/images/index.php?path=/banner/21
RewriteRule ^images/(.*)$ /assets/api/images/index.php?path=/$1 [L,NC,QSA]

# 处理lib前缀请求:api.mysite.com/lib/lib.js → /assets/api/libs/index.php?path=/lib.js
RewriteRule ^lib/(.*)$ /assets/api/libs/index.php?path=/$1 [L,NC,QSA]

配置细节解释

  1. 静态资源放行规则:开头的三个RewriteCond会跳过对已存在的文件、目录、符号链接的重写,保证图片、JS、CSS等静态资源可以直接访问,不会被API规则拦截。
  2. 子域名匹配条件:RewriteCond %{HTTP_HOST} ^api\. [NC]确保下面的重写规则只作用于api.mysite.com,不会影响主域名或其他子域名。
  3. 前缀匹配与路径传递:
    • 每个RewriteRule用(.*)捕获前缀后的所有路径内容(比如app/carts里的carts)
    • 通过?path=/$1将纯路径(比如/carts)作为查询参数传递给对应的index.php
    • 标志L表示匹配后停止后续规则,NC忽略大小写,QSA保留原始请求的查询参数(比如api.mysite.com/app/carts?foo=bar会被重写为/assets/api/app/index.php?path=/carts&foo=bar)

API获取路径的方式

在对应的index.php文件中,你可以直接通过$_GET['path']拿到传递的纯路径,比如:

// /assets/api/app/index.php
$requestPath = $_GET['path']; // 当请求api.mysite.com/app/carts时,$requestPath的值是"/carts"

这样就完全实现了你想要的:让API只接收前缀后的路径部分,同时保持子域名的友好URL格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:22:36