如何设置子文件夹为站点根目录,使绝对路径在本地和域名访问时一致
问题根源
/开头的绝对路径是相对于当前访问域名的根路径,而非网站文件所在的磁盘目录:
- 用
www.site_1.se访问时,域名根路径对应的服务器目录是C:/xampp/htdocs/site_1.se,所以/images/file.png会匹配到该目录下的对应资源 - 用
localhost访问时,域名根路径对应的服务器目录是C:/xampp/htdocs,所以/images/file.png会尝试匹配htdocs根目录下的资源,自然找不到目标文件
最优解决方案(推荐)
直接修改本地hosts文件用域名访问,和线上环境100%一致,无需修改任何代码或Apache配置,完全避免路径不匹配问题:
- 打开hosts文件:Windows系统路径为
C:\Windows\System32\drivers\etc\hosts,需要管理员权限编辑;mac/Linux路径为/etc/hosts,需要root权限编辑 - 在文件末尾添加以下映射规则:
127.0.0.1 site_1.se www.site_1.se 127.0.0.1 site_2.se www.site_2.se
- 保存后重启浏览器,直接输入对应域名访问即可,路径解析规则和线上完全相同。
备选方案(必须用localhost路径访问的场景)
如果一定要用localhost/site_1.se的形式访问,可以通过Apache重写规则修正路径:
- 先确认Apache配置文件中已开启
mod_rewrite模块:找到LoadModule rewrite_module modules/mod_rewrite.so配置行,去掉行首的#注释,重启Apache生效 - 在每个站点的根目录(比如
C:/xampp/htdocs/site_1.se)下新建.htaccess文件,写入以下内容:
RewriteEngine On # 仅针对localhost访问的场景做重写 RewriteCond %{HTTP_HOST} ^localhost$ # 排除已经指向当前站点目录的请求,避免死循环 RewriteCond %{REQUEST_URI} !^/site_1.se/ # 把所有请求重写到当前站点子目录下 RewriteRule ^(.*)$ /site_1.se/$1 [L]
- 每个站点对应修改规则里的
site_1.se为自身目录名即可。
注:该方案存在额外的重写开销,部分输出当前URL的业务逻辑可能出现异常,仅作为临时兼容方案使用。
内容的提问来源于stack exchange,提问作者Arre
相关产品推荐
相关产品推荐

