HTaccess SEO友好URL重写规则问题:404错误求助
解决URL重定向后404的问题
你的规则只完成了旧URL到新URL的外部重定向,但没有处理新URL到实际PHP文件的内部映射——当用户访问https://www.example.com/news/hello-world时,服务器找不到对应的真实文件/目录,所以返回404。
添加一条内部重写规则即可解决,完整的.htaccess代码如下:
# 外部重定向:将旧URL跳转到新URL(地址栏会变化) RewriteCond %{THE_REQUEST} /news\.php\?post=([^\s&]+) [NC] RewriteRule ^ /news/%1? [R=302,L,NE] # 内部重写:将新URL映射到实际PHP文件(地址栏不变) RewriteRule ^news/([^/]+)/?$ /news.php?post=$1 [L,QSA]
关键说明:
- 第一条规则和你原代码一致,负责把
news.php?post=xxx跳转成友好的news/xxx,R=302是临时重定向,确认没问题后可以改成R=301永久重定向。 - 第二条规则是核心:当用户访问
news/xxx时,服务器内部悄悄把请求转发给news.php?post=xxx,PHP就能正常处理请求,不会返回404。QSA参数用于保留额外的查询参数(比如news/hello-world?foo=bar会被转成news.php?post=hello-world&foo=bar),如果不需要可以去掉。
另外要确保:
- Apache服务器已启用
mod_rewrite模块 - 网站根目录的
.htaccess文件存在,且服务器配置中AllowOverride设置为All或FileInfo
内容的提问来源于stack exchange,提问作者arman
相关产品推荐
相关产品推荐

