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

PHP与.htaccess实现美观Permalink URL重写故障排查

博物馆说明系统URL重写解决方案

问题场景

用PHP开发小型博物馆说明系统,原本通过index.php生成带查询字符串的链接,请求details.php展示单条展品说明,原URL为:
http://localhost:8888/dida/details/details.php?url=test-1
目标是将URL优化为更友好的格式:
http://localhost:8888/dida/details/test-1
本地MAMP环境基础重写功能正常,但最初编写的.htaccess规则返回404错误,理清逻辑后已解决问题。

解决步骤

1. 生成友好格式的前端链接

在index.php中,把原本指向details.php?url=xxx的链接,替换为目标友好URL格式,示例代码:

<!-- 原链接写法 -->
<a href="details/details.php?url=<?php echo $itemUrl; ?>">查看详情</a>

<!-- 修改后的友好链接 -->
<a href="/dida/details/<?php echo $itemUrl; ?>">查看详情</a>

确保用户点击的是优化后的URL,这是重写生效的前提。

2. 配置.htaccess重写规则

在/dida/details/目录下创建或修改.htaccess文件,写入以下规则:

RewriteEngine On

# 排除实际存在的文件和目录,避免静态资源被错误重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 将友好URL转发到details.php并传递参数
RewriteRule ^([^/]+)$ details.php?url=$1 [L]

规则说明

  • RewriteEngine On:开启URL重写功能
  • 两条RewriteCond:确保只有当请求的路径不是实际存在的文件或目录时才触发重写,防止CSS、JS、图片等静态资源被错误处理
  • RewriteRule:捕获URL中/dida/details/之后的字符串(比如test-1),将其作为url参数传递给details.php,[L]表示终止后续规则处理

验证

在MAMP环境中,确认mod_rewrite模块已启用(默认MAMP已开启),访问友好URLhttp://localhost:8888/dida/details/test-1,即可正常加载details.php,并通过$_GET['url']获取到对应的展品标识。

内容的提问来源于stack exchange,提问作者Marco Boncompagno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:46:05