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

Apache2 mod_rewrite如何用前序条件子域名变量校验子目录文件存在性

配置失效原因

你原有配置里判断文件存在的逻辑中,%{DOCUMENT_ROOT}%1/$1的$1无法捕获到当前请求的路径,因为对应RewriteRule的匹配规则是^,没有设置路径捕获规则,导致$1为空,自然无法匹配到正确的文件路径。

修正后的完整配置

Options +FollowSymLinks -MultiViews

RewriteEngine On

# 处理静态文件/目录映射到对应子域名目录
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com
# 直接用REQUEST_URI拼接路径判断文件是否存在
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^ /%1%{REQUEST_URI} [L]

# 处理images路径的重写规则
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com
RewriteRule ^images/(.*)$ /%1/image.php?test=$1 [L]

补充说明

  • 上述配置的重写都是内部跳转,用户端不会看到路径里的子目录名称,不会影响原有的URL展示逻辑
  • 如果你需要适配多级子域名(比如xxx.yyy.domain.com),可以把HTTP_HOST的匹配规则改成^(.+)\.domain.com,就能捕获完整的子域名前缀作为目录名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:06:05