如何在Apache子文件夹环境中正确维护相对URL路径?
解决方案
可以通过Apache的mod_rewrite规则实现需求,无需修改站点源码,也不会影响主站的正常访问,操作步骤如下:
- 进入Apache主机的
public_html根目录,新建/编辑.htaccess文件 - 将以下规则写入文件:
RewriteEngine On # 仅当根目录下不存在请求的文件/目录时,才执行后续检查 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 检查/game目录下是否存在对应的请求资源 RewriteCond %{DOCUMENT_ROOT}/game%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}/game%{REQUEST_URI} -d # 内部重写请求到/game目录下,无外部跳转,地址栏保持不变 RewriteRule ^(.*)$ /game/$1 [L]
- 如果需要直接访问
dev.mydomain.com时自动打开game站点的首页,可在上述规则上方额外添加一条规则:
RewriteRule ^$ /game/ [L]
规则说明
- 只有主站根目录不存在对应资源时,才会匹配game目录下的内容,主站原有功能完全不受影响
- 资源请求为内部重写,不会产生301/302跳转,性能不受影响
- 如果game目录下也不存在对应资源,会正常返回404状态码,符合预期
注意事项
- 需确保Apache已经开启
mod_rewrite模块,且允许根目录加载.htaccess配置(绝大多数虚拟主机默认已开启该配置) - 若game目录内本身存在
.htaccess配置(如前端SPA的history模式路由规则),无需修改,上述根目录规则不会与其冲突
内容的提问来源于stack exchange,提问作者d13
相关产品推荐
相关产品推荐

