如何保留根目录.htaccess重定向逻辑并正常访问landing-page子目录页面
解决办法:保留根目录路由同时正常服务子目录落地页
这个问题的根源很直观:你的根目录.htaccess规则会把所有不存在的文件/目录请求转发到根目录index.php,但访问/landing-page/时,页面引用的静态资源(比如index.js)被浏览器请求成了根目录的/index.js——而根目录index.php返回的是HTML内容,JS解析时遇到<自然就触发了语法错误。
要解决这个问题,你需要做两件关键调整:修改.htaccess排除子目录重定向,同时确保落地页的静态资源路径正确。
1. 修改根目录.htaccess,排除landing-page的重定向
在现有重定向规则前,添加一条条件,让landing-page开头的请求不被转发到根目录index.php。修改后的完整.htaccess如下:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteBase / RewriteRule ^index\.php$ - [L] # 新增:排除landing-page目录的请求,优先处理该目录下的文件 RewriteCond %{REQUEST_URI} !^/landing-page/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
这条新增的RewriteCond会告诉Apache:如果请求路径是以/landing-page/开头的,就跳过后面的根目录重定向规则,直接去该目录下寻找对应的文件。
2. 确保Svelte构建产物的资源路径正确
光改.htaccess还不够,你需要确认Svelte构建时,静态资源的引用路径是指向/landing-page/的,否则浏览器还是会错误请求根目录的资源。
如果你的项目用Vite构建(Svelte常用工具),在vite.config.js里设置base属性:
export default { base: '/landing-page/' }
如果用Webpack构建,在webpack.config.js的output配置里设置publicPath:
module.exports = { // ...其他配置项 output: { // ...其他output配置 publicPath: '/landing-page/' } }
重新构建你的Svelte落地页后,生成的home.html里的JS/CSS引用就会变成/landing-page/index.js这类正确的路径。
验证效果
完成以上两步后,访问/landing-page/:
- 页面会正常加载
landing-page/index.php - 静态资源会请求
/landing-page/下的对应文件,不再被重定向到根目录 - 控制台的语法错误也会彻底消失
内容的提问来源于stack exchange,提问作者Giuliano
相关产品推荐
相关产品推荐

