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

如何配置.htaccess实现多个子目录各自作为独立站点根目录运行

实现方案

以下是两种不同权限场景下的可行实现思路,均适配你描述的多子目录独立根目录需求:

方案1:有站点全局配置权限(隔离性最优)

优先在站点根目录(即mydomain.com对应的服务器根目录)放置.htaccess做统一重写,再配合子目录独立配置实现完全隔离:

根目录.htaccess配置

RewriteEngine On

# 适配site1的根路径资源请求
RewriteCond %{REQUEST_URI} !^/site1/
RewriteCond %{HTTP_REFERER} ^https?://[^/]+/site1(/.*)?$ [NC]
RewriteRule ^(.*)$ /site1/$1 [L]

# 适配site2的根路径资源请求
RewriteCond %{REQUEST_URI} !^/site2/
RewriteCond %{HTTP_REFERER} ^https?://[^/]+/site2(/.*)?$ [NC]
RewriteRule ^(.*)$ /site2/$1 [L]

# 子目录根路径访问自动补全斜杠
RewriteRule ^site1$ /site1/ [L,R=301]
RewriteRule ^site2$ /site2/ [L,R=301]

子目录单独配置(site1、site2目录下分别放置)

RewriteEngine On
# 禁止跨父级目录访问
RewriteCond %{REQUEST_URI} \.\./ [NC]
RewriteRule ^.*$ - [F,L]

# 修正PHP运行时的根目录判定,site2配置替换为对应路径即可
php_value auto_prepend_file /你的服务器实际路径/mydomain.com/site1/fix_root.php

新增根目录修正脚本

在每个子目录下新建fix_root.php,覆盖应用读取的根目录参数:

<?php
$_SERVER['DOCUMENT_ROOT'] = __DIR__;
$_SERVER['SCRIPT_NAME'] = str_replace(dirname($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
?>

方案2:仅拥有子目录写入权限(无全局配置权限时使用)

如果只能操作site1、site2目录内的文件,直接在子目录下放置如下.htaccess即可:

RewriteEngine On
RewriteBase /site1/
# site2配置只需要把上面的RewriteBase改为/site2/即可

# 映射所有根路径资源请求到当前子目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1 [L]

RewriteRule ^/(.*)$ /site1/$1 [L]

如果使用CodeIgniter框架,额外修改应用配置文件中的$config['base_url']为https://mydomain.com/site1/,$config['index_page']留空即可适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:07