如何实现地址栏不变时将站点首页重定向到子目录指定页面
实现方案
你之前使用的Redirect指令属于服务器外部重定向指令,会返回301/302状态码通知浏览器主动跳转目标路径,所以地址栏会同步更新。要实现地址栏不变的访问效果,需要使用服务器重写模块做内部转发,整个转发过程在服务端完成,浏览器侧无感知。
Apache 服务器配置
- 首先确认已开启
mod_rewrite模块 - 编辑站点根目录下的
.htaccess文件,添加如下规则:
RewriteEngine On # 匹配根路径访问请求 RewriteRule ^$ /subfolder/somepage.php [L] # 同时匹配访问/index.php的请求 RewriteRule ^index\.php$ /subfolder/somepage.php [L]
如果规则写在虚拟主机配置文件中,调整为如下写法即可:
RewriteEngine On RewriteCond %{REQUEST_URI} ^/(index\.php)?$ RewriteRule ^ /subfolder/somepage.php [L]
Nginx 服务器配置
编辑对应站点的server配置块,添加如下规则:
# 匹配根路径访问 location = / { rewrite ^ /subfolder/somepage.php last; } # 匹配/index.php访问请求 location = /index.php { rewrite ^ /subfolder/somepage.php last; }
注意事项
如果目标页面somepage.php内引用了相对路径的静态资源(CSS、JS、图片等),会因为浏览器当前地址为站点根路径,导致相对路径资源加载失败。可通过两种方案解决:
- 将所有静态资源引用路径改为绝对路径,例如
/subfolder/css/style.css - 额外添加静态资源的内部重写规则,将对应资源请求转发到子目录下
内容的提问来源于stack exchange,提问作者phantomhive
相关产品推荐
相关产品推荐

