You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.htaccess实现URL重写时遭遇404错误求助

解决.htaccess URL重写404问题

你当前的规则仅完成了旧URL到新URL的外部重定向,但当用户访问新格式的/services/CO/Arvada/时,服务器找不到对应的物理文件,因此返回404错误。需要补充一条内部重写规则,将新URL映射回实际处理请求的state.php文件。

完整的.htaccess规则

RewriteEngine On

# 外部重定向:将旧的动态URL跳转到新的静态URL(永久重定向)
RewriteCond %{QUERY_STRING} ^state=([A-Za-z]+)&city=([A-Za-z]+)$
RewriteRule ^services/state\.php$ /services/%1/%2/ [R=301,L]

# 内部重写:将新的静态URL映射回state.php(不暴露真实文件路径)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^services/([A-Za-z]+)/([A-Za-z]+)/$ /services/state.php?state=$1&city=$2 [L]

规则说明

  • 外部重定向规则:匹配https://example.com/services/state.php?state=CO&city=Arvada这类旧URL,永久重定向到https://example.com/services/CO/Arvada/,结尾的/保证URL格式符合需求,L标记表示执行完这条规则后停止后续处理。
  • 内部重写规则:
    • RewriteCond %{REQUEST_FILENAME} !-f 和 RewriteCond %{REQUEST_FILENAME} !-d 用于排除真实存在的文件和目录,避免影响services文件夹内其他正常资源。
    • 匹配/services/XX/YY/格式的新URL,内部转发到services/state.php?state=XX&city=YY,用户看到的仍是静态URL,但服务器实际用PHP文件处理请求。

注意事项

  • 如果state或city参数可能包含数字、连字符,可将正则表达式中的[A-Za-z]+修改为[A-Za-z0-9-]+。
  • 测试阶段建议先用R=302临时重定向,确认规则生效后再改为R=301永久重定向,防止浏览器缓存错误规则。
  • 确保服务器已启用mod_rewrite模块,且.htaccess文件拥有生效权限。

内容的提问来源于stack exchange,提问作者Sarah B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:17:16