如何用.htaccess将app-domain.com下域名路径(含参数)重写为对应独立域名?
解决.htaccess域名重写与多用户域名指向问题
一、实现app-domain.com/example.com到example.com的重定向(含参数保留)
要实现你需要的URL重定向并避免500错误,可使用以下规则:
# 匹配app-domain.com下的域名路径,重定向到对应独立域名 RewriteCond %{HTTP_HOST} ^(www\.)?app-domain\.com$ [NC] # 捕获路径中的域名部分(比如example.com),并重定向,保留查询参数 RewriteRule ^([a-z0-9.-]+)$ http://$1/%{QUERY_STRING} [R=302,L,QSA]
规则说明:
RewriteCond:限定规则仅作用于app-domain.com(含www前缀)的请求。RewriteRule中的^([a-z0-9.-]+)$:捕获路径中符合域名格式的字符串(比如example.com),作为$1变量使用。[R=302,L,QSA]:R=302为临时重定向(正式环境可改为R=301永久重定向);L表示这是最后一条规则,停止后续匹配;QSA自动保留原URL的查询参数(比如?page=podcast会被附加到目标URL)。
该规则可实现:
app-domain.com/example.com→example.comhttp://app-domain.com/example.com?page=podcast→http://example.com/?page=podcast
二、处理用户自有域名指向服务器的内部匹配
当用户将自有域名(比如example.com)指向你的应用服务器后,需让服务器匹配到app-domain.com/example.com对应的用户页面,可添加以下内部重写规则:
# 当请求主机不是app-domain.com时,内部重写到对应路径 RewriteCond %{HTTP_HOST} !^(www\.)?app-domain\.com$ [NC] # 将当前域名作为路径,内部转发到app-domain的对应用户页面 RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [L]
规则说明:
RewriteCond:排除app-domain.com本身的请求,仅处理用户自有域名的访问。RewriteRule:将当前请求的路径(比如/?page=podcast)附加到/%{HTTP_HOST}/之后,内部转发到应用的用户专属页面逻辑。
三、你之前规则导致500错误的原因
你提供的规则存在两个核心问题:
- 匹配范围错误:
RewriteRule ^/?$仅匹配根路径(app-domain.com/),完全没覆盖app-domain.com/example.com这类路径请求。 - 目标URL格式错误:目标
http://example.com/?page=podcast/末尾的斜杠多余,且硬编码了固定域名和参数,无法适配多用户场景,同时可能引发URL解析错误导致服务器500。
内容的提问来源于stack exchange,提问作者Mike Nguyen
相关产品推荐
相关产品推荐

