如何在PHP中实现用户友好URL?XAMPP环境404问题求助
问题解决指南
核心问题分析
你的.htaccess规则存在两处关键错误,加上XAMPP的基础配置可能未到位,导致404错误:
- 正则
(\d+)仅匹配数字,但你的文章slug是字符串(如test-example),规则无法匹配目标URL - 重写目标指向
/news/?article_slug=$1,但实际处理请求的是index.php,路径指向错误
1. 修正.htaccess规则
替换现有规则为以下内容:
RewriteEngine On # 跳过已重定向的请求,避免循环 RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule ^ - [L] # 将友好URL重写为实际处理的index.php RewriteRule ^news/([\w-]+)$ /news/index.php?article_slug=$1 [L] # 将旧的带query string的URL重定向到友好URL(可选,用于SEO和旧链接兼容) RewriteCond %{QUERY_STRING} ^article_slug=([\w-]+)$ RewriteRule ^news/index\.php$ /news/%1 [R=301,L]
规则说明:
([\w-]+):匹配包含字母、数字、下划线和连字符的slug,完美适配test-example这类格式- 重写目标明确指向
/news/index.php,确保请求能被PHP脚本正确接收处理 - 外部重定向使用
301永久重定向,兼顾SEO和旧链接跳转需求
2. 配置XAMPP环境确保规则生效
.htaccess需要Apache满足两个配置要求:
- 开启mod_rewrite模块:
打开XAMPP的Apache配置文件(httpd.conf),找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉行首的#注释,保存后重启Apache。 - 设置AllowOverride为All:
在httpd.conf中找到对应news目录(或全局网站根目录)的<Directory>块,将AllowOverride None修改为AllowOverride All,保存后重启Apache。
3. 验证效果
重启Apache后:
- 访问
http://localhost/news/test-example,应正常加载对应文章 - 访问旧URL
http://localhost/news/index.php?article_slug=test-example,应自动跳转到友好URL
内容的提问来源于stack exchange,提问作者Nashie
相关产品推荐
相关产品推荐

