子域图片重写至根域:.htaccess规则失效问题求助
解决子域访问主域/assets目录资源的问题
你的现有规则逻辑完全搞反了——它们是把非www域名下的/assets请求重定向回主域,但你要的是让子域能访问主域的/assets资源。
前提确认
- 子域
subdomain.example.com必须已正确解析到服务器,且Apache已配置该子域的虚拟主机(若子域有独立文档根,需确保服务器进程有权限访问主域的/assets目录)。
正确的.htaccess规则
情况1:子域与主域共享同一文档根
这种情况无需额外重写,直接访问https://subdomain.example.com/assets/picture.jpg即可读取对应文件。若访问异常,可添加以下规则确保请求被正确处理:
# 允许子域访问/assets目录 RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC] RewriteRule ^assets/(.*)$ /assets/$1 [L]
情况2:子域有独立文档根
假设主域文档根为/var/www/www,子域文档根为/var/www/subdomain,需将子域下的/assets请求内部映射到主域的/assets目录:
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC] RewriteRule ^assets/(.*)$ /var/www/www/assets/$1 [L]
若需重定向(子域请求跳转到主域URL)
如果实际需求是让子域的/assets请求跳转到主域地址(而非直接访问),可使用:
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC] RewriteRule ^assets/(.*)$ https://www.example.com/assets/$1 [R=301,L]
原有规则的错误点
- 正则写法错误:否定匹配应写为
!^www\.example\.com$,而非^!www.example.com$;域名中的.必须转义为\.,否则会匹配任意字符。 - 逻辑反向:原有规则是将非www的请求转去主域,与你需要的子域访问需求完全相悖。
- 路径匹配错误:规则二中的
^/assets/(.*)$在.htaccess中无需开头的/,因为.htaccess基于当前目录解析,开头的/会导致匹配失败。
内容的提问来源于stack exchange,提问作者Rutger
相关产品推荐
相关产品推荐

