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
相关产品推荐
相关产品推荐

