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

如何在.htaccess中使用主机根目录实现子域名请求重定向到PHP文件

问题根因
  • 路径解析规则误解:.htaccess中RewriteRule的目标路径如果以/开头,会被解析为当前子域名对应站点的文档根目录下的相对路径,而非服务器根目录的绝对路径。你当前子域名的文档根目录为/home/asr/sub.domain.com/,填写的/home/asr/public_html/Test/index.php会被自动拼接为/home/asr/sub.domain.com/home/asr/public_html/Test/index.php,和报错信息完全吻合,自然无法找到对应文件。
  • 缺少重写防循环逻辑:现有规则没有排除index.php本身的请求,重写后发起的index.php请求会再次命中规则,造成死循环。
  • 缺少真实资源排除规则:现有规则会将站点下真实存在的静态文件、目录也重写到PHP文件,导致静态资源无法访问。
正确配置方案

首先确认Apache配置中对应站点的AllowOverride参数设置为All,且Apache运行用户对/home/asr/public_html/Test/目录有读取权限,然后将.htaccess内容替换为如下配置即可:

RewriteEngine on
RewriteBase /
# 排除真实存在的文件、目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 用相对路径指向跨目录的PHP文件,避免路径拼接错误
RewriteRule ^(.*)$ ../public_html/Test/index.php?path=%{REQUEST_FILENAME} [NC,L,QSA]

如果相对路径写法因服务器配置限制不生效,可以直接在子域名的Apache虚拟主机配置中添加别名规则:

Alias /handler.php /home/asr/public_html/Test/index.php

之后将.htaccess的重写规则修改为:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /handler.php?path=%{REQUEST_FILENAME} [NC,L,QSA]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:57:01