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

Apache2环境下无需修改页面href实现根相对链接指向site子目录的方案问询

Apache2 实现方案

方案1:mod_substitute 自动替换页面链接(推荐)

该方案无需修改任何页面代码、也无需额外跳转,Apache 在返回 /site 路径下的页面内容时,会自动把所有 href="/ 开头的链接替换为 href="/site/,直接返回正确链接给浏览器,兼容性最好。
操作步骤:

  1. 启用所需模块:
a2enmod substitute filter
systemctl restart apache2
  1. 在站点虚拟主机的 <Directory /path/to/your/site/root> 配置块,或者 /site 目录下的 .htaccess 文件中添加如下规则:
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|href=\"/|href=\"/site/|nq"

如果只需要替换特定规则的链接,调整上述正则匹配规则即可。

方案2:mod_rewrite URL重写

如果你不需要修改页面返回内容,仅在请求触发时做跳转/内部重定向,可以选择该方案。

前置操作

先启用 rewrite 模块:

a2enmod rewrite
systemctl restart apache2

场景A:所有根路径的/xxx.html请求都指向/site/xxx.html

适合站点根路径下没有和 /site 目录同名的资源、所有 / 开头的资源请求都需要落到 /site 目录的场景,在站点根目录的 .htaccess 或者虚拟主机配置中添加:

RewriteEngine On
# 排除已经是/site开头的请求,避免死循环
RewriteCond %{REQUEST_URI} !^/site/
# 末尾加R=302是外部跳转,地址栏会变;去掉R=302是内部重定向,地址栏不变
RewriteRule ^(.*)$ /site/$1 [L,R=302]

场景B:仅从/site页面点击的请求才重定向

如果你希望用户直接访问/something.html仍走根路径,只有从 /site 下的页面点击的链接才跳转到 /site 目录下,可通过 Referer 判断实现:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://www\.example\.com/site/ [NC]
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule ^(.*)$ /site/$1 [L,R=302]

注意:该方案依赖浏览器发送 Referer 头,部分用户可能会禁用该头导致规则不生效。

内容的提问来源于stack exchange,提问作者Péter Hatházi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:03