.htaccess配置URL重写触发404 如何将带loc参数URL转为美化路径
问题原因
你当前只配置了「带参数的原始地址跳转至美化后地址」的外部跳转规则,没有配套配置「美化后地址内部映射到实际服务端处理路径」的规则,服务器找不到/customer/dashboard/对应的真实目录或文件,因此返回404错误。
修正后的完整.htaccess规则
(该规则适用于.htaccess放在网站根目录的场景)
RewriteEngine On # 不带www跳转带www + HTTP跳转HTTPS RewriteCond %{HTTP_HOST} ^everyoneknows\.com\.my [OR,NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.everyoneknows.com.my/$1 [R=301,NC,END] # 规则1:原始带参数地址外部跳转至美化URL,清除query参数 RewriteCond %{QUERY_STRING} ^loc\=dashboard$ [NC] RewriteRule ^customer/?$ https://www.everyoneknows.com.my/customer/dashboard/? [R=301,NC,END] # 规则2:美化URL内部重写回实际处理地址,用户地址栏无变化 RewriteRule ^customer/dashboard/?$ /customer/?loc=dashboard [NC,END]
注意事项
- 如果你的.htaccess文件是放在
/customer子目录下,需调整规则路径:
RewriteEngine On # 不带www跳转带www + HTTP跳转HTTPS RewriteCond %{HTTP_HOST} ^everyoneknows\.com\.my [OR,NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.everyoneknows.com.my/$1 [R=301,NC,END] # 规则1:原始带参数地址外部跳转至美化URL RewriteCond %{QUERY_STRING} ^loc\=dashboard$ [NC] RewriteRule ^/?$ https://www.everyoneknows.com.my/customer/dashboard/? [R=301,NC,END] # 规则2:美化URL内部重写回实际处理地址 RewriteRule ^dashboard/?$ /customer/?loc=dashboard [NC,END]
- 测试阶段建议将
R=301临时改为R=302,避免浏览器缓存错误的301跳转规则,调试正常后再改回301。 - 确认服务器已开启
mod_rewrite模块,且站点配置的AllowOverride参数设置为All,保证.htaccess文件可以生效。
内容的提问来源于stack exchange,提问作者David Holly
相关产品推荐
相关产品推荐

