.htaccess配置调整:允许assets目录JSON访问及Vaadin路由修复
解决.htaccess配置问题的方案
以下是调整后的.htaccess配置,同时解决JSON文件访问限制和Vaadin Router刷新404的问题:
# 开启重写引擎 RewriteEngine On # 允许访问assets/i18n目录下的JSON文件(优先放行,避免被后续禁止规则拦截) RewriteRule ^assets/i18n/.*\.json$ - [L] # 禁止访问敏感配置文件 RewriteRule ^\.env$ - [F,L] # 禁止除assets/i18n外的其他JSON文件 RewriteRule ^(?!assets/i18n/).*\.json$ - [F,L] # 处理Vaadin Router路由与PHP扩展名隐藏 # 跳过真实存在的文件和目录,避免静态资源被重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将/page/123这类路由映射到page.php/123,保留路径参数 RewriteRule ^([^/]+)(/.*)?$ $1.php$2 [L,QSA]
规则说明:
JSON文件访问控制:
先通过RewriteRule ^assets/i18n/.*\.json$ - [L]放行目标目录下的JSON文件,L标记确保这部分请求不会被后续的禁止规则处理;再用^(?!assets/i18n/).*\.json$的负向断言,禁止其他所有JSON文件访问,同时保护.env文件。路由与扩展名隐藏:
RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d确保只有当请求的路径不是真实文件/目录时才执行重写,避免图片、CSS等静态资源被错误处理。RewriteRule ^([^/]+)(/.*)?$ $1.php$2 [L,QSA]将/page映射到page.php,/page/123映射到page.php/123:([^/]+)匹配路由的第一部分(如page),作为PHP文件名;(/.*)?匹配后续的路径部分(如/123),作为PATH_INFO传递给PHP;QSA标记保留原请求的查询字符串,比如/page/123?foo=bar会被映射到page.php/123?foo=bar。
在PHP代码中,你可以通过$_SERVER['PATH_INFO']获取/123这类路径参数,配合Vaadin Router处理前端路由逻辑。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

