如何使用.htaccess将域名所有路径请求重定向到index.html
配置不生效的核心原因
- RewriteRule匹配逻辑错误:RewriteRule的第一个参数仅匹配请求的路径部分(即域名后的内容,比如访问
example.com/ha36hja时匹配的是ha36hja),不会匹配带http://、域名的完整URL,你写的^http://example.com(.*)$规则无法命中任何路径请求,因此除了根目录默认加载index.html外,其他路径都会返回404。 - 冗余参数不符合需求:规则中加的
R=301属于外部重定向参数,会修改用户浏览器地址栏的URL为example.com/index.html,不符合你保留原有6位字符串URL的需求。
正确修改方案
首先确认两项前置配置已生效,否则.htaccess规则不会被加载:
- Apache已启用
mod_rewrite模块,可执行a2enmod rewrite开启后重启Apache服务 - 站点配置中
/var/www/html目录对应的AllowOverride参数设置为All
之后将.htaccess内容替换为以下配置即可:
RewriteEngine On RewriteBase / # 排除真实存在的文件、目录,避免css、js、图片等静态资源无法加载 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 仅匹配刚好6位的字母/数字组合路径,内部重写加载index.html RewriteRule ^[a-zA-Z0-9]{6}$ index.html [L,NC]
如果6位字符串允许包含下划线、短横线等特殊字符,可将正则调整为^.{6}$匹配任意6位字符。
内容的提问来源于stack exchange,提问作者Archana Acharya T
相关产品推荐
相关产品推荐

