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
相关产品推荐
相关产品推荐

