Apache+Wamp多站点别名配置后静态资源及路由404问题求助
解决Apache Alias多站点静态资源加载与路由404问题
一、静态资源无法加载的解决方法
问题根源:项目中资源引用使用了根路径(如/css/style.css),浏览器会直接请求123.45.67.89/css/style.css,而非123.45.67.89/website-a/css/style.css,导致资源找不到。
方案1:修改项目资源引用路径
- 改用相对路径:将资源引用从绝对根路径改成相对当前页面的路径,比如把
<link href="/css/style.css">改为<link href="./css/style.css">(适用于静态页面)。 - 配置项目基础路径(框架项目):
- 若为PHP框架(如Laravel):修改
.env文件的APP_URL为http://123.45.67.89/website-a,或修改config/app.php中的'url'参数;同时确保模板中的资源使用asset()或url()生成路径。 - 若为前端框架(如Vue/React):在项目配置文件中设置
publicPath为'/website-a/'(Vue的vue.config.js、React的package.json中homepage字段)。
- 若为PHP框架(如Laravel):修改
方案2:通过Apache Rewrite规则转发资源请求(无需改代码)
在对应站点的<Directory>配置块中添加Rewrite规则,将根路径的资源请求转发到别名路径下:
Alias /website-a "c:/wamp64/www/website-a/public" <Directory "c:/wamp64/www/website-a/public"> Options +Indexes +FollowSymLinks +MultiViews AllowOverride all Require all granted # 开启重写引擎 RewriteEngine On # 设置重写基准路径 RewriteBase /website-a/ # 转发根路径的css、js等资源请求到别名路径 RewriteRule ^css/(.*)$ /website-a/css/$1 [L] RewriteRule ^js/(.*)$ /website-a/js/$1 [L] # 可根据项目资源目录添加更多规则 </Directory>
二、/login路径404的解决方法
问题根源:Apache默认不会将子路径下的路由请求转发到项目入口文件(如index.php/index.html),导致直接返回404。
针对PHP后端路由(如Laravel/ThinkPHP)
在站点的<Directory>配置块中添加Rewrite规则,将非文件/非目录的请求转发到入口文件:
Alias /website-a "c:/wamp64/www/website-a/public" <Directory "c:/wamp64/www/website-a/public"> Options +Indexes +FollowSymLinks +MultiViews AllowOverride all Require all granted RewriteEngine On RewriteBase /website-a/ # 若请求的是存在的文件或目录,直接访问 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 否则转发到index.php处理路由 RewriteRule ^(.*)$ index.php/$1 [L] </Directory>
针对前端单页应用路由(如Vue/React)
将非文件/非目录的请求转发到index.html:
Alias /website-a "c:/wamp64/www/website-a/public" <Directory "c:/wamp64/www/website-a/public"> Options +Indexes +FollowSymLinks +MultiViews AllowOverride all Require all granted RewriteEngine On RewriteBase /website-a/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.html [L] </Directory>
注意事项
- 确保Apache的
rewrite_module已开启:打开Wamp管理器,依次点击Apache -> Apache Modules -> 勾选rewrite_module,重启Apache生效。 - 每个站点的配置需对应修改别名前缀(如
website-b的配置需把RewriteBase改成/website-b/)。
内容的提问来源于stack exchange,提问作者Morpheus_ro
相关产品推荐
相关产品推荐

