如何通过项目目录的.htaccess重定向绝对链接至本地项目路径
本地多项目Web服务器绝对链接适配方案
本地开发环境的Web服务器下有多个项目目录,比如:
https://localhost/project1 https://localhost/project2
项目中使用的绝对链接(如/images/example.jpg)上线后能正常指向域名根目录,但在本地环境下会直接指向localhost/images/example.jpg,无法访问对应项目内的资源。之前在根目录.htaccess配置的规则只能单个项目生效,切换项目时还得修改根配置,非常麻烦。
下面是**每个项目目录单独配置.htaccess**的解决方案,实现逻辑:先检查服务器根目录是否存在请求的文件/目录,不存在则自动到当前项目目录中查找:
项目目录下的.htaccess配置代码
# 开启URL重写引擎 RewriteEngine On # 设置当前项目的基础路径,替换成你的项目目录名,比如/project1/或/project2/ RewriteBase /project1/ # 检查根目录下是否存在请求的文件或目录,存在则直接访问 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] # 根目录不存在对应资源,重写到当前项目目录下的对应路径 RewriteRule ^(.*)$ $1 [L,QSA]
规则说明
RewriteEngine On:开启Apache的URL重写功能,必须放在所有规则最前面。RewriteBase /project1/:指定当前项目的根路径,每个项目只需把/project1/替换成自己的目录名(比如/project2/)即可。- 前两条
RewriteCond:检查服务器根目录(%{DOCUMENT_ROOT})下的请求路径(%{REQUEST_URI})是否为存在的文件(-f)或目录(-d),满足任一条件就直接放行(RewriteRule ^ - [L]),[L]表示这是最后执行的规则,不再往下处理。 - 最后一条
RewriteRule:如果根目录没有找到对应资源,就把请求重定向到当前项目目录下的对应路径,[QSA]表示保留原请求的查询参数(比如/images/example.jpg?foo=bar这类带参数的请求会完整保留参数)。
注意事项
- 确保Apache服务器已经启用了
mod_rewrite模块。 - 每个项目目录下都要放置这份
.htaccess,并修改RewriteBase为自己的项目路径,无需修改服务器根目录的配置,切换项目时直接访问对应路径即可。
内容的提问来源于stack exchange,提问作者tony
相关产品推荐
相关产品推荐

