自定义页面展示所有帖子,除htaccess外美化URL的实现方案
除.htaccess外的帖子美观URL实现方案
以下是3种可替代.htaccess的实现方式,都可以实现你要的美观URL效果:
1. PHP PATH_INFO/单入口路由方案
该方案不需要修改任何服务器配置,仅靠PHP代码即可实现,兼容性极强。
你可以将帖子链接修改为以下格式:
<a href="/mywebsite/index.php/post/<?php echo $post_detail['id'] ?>"> <div class="post-card"> [post content] </div> </a>
然后在index.php中解析请求路径,匹配帖子ID即可:
<?php // 解析请求路径 $pathInfo = $_SERVER['PATH_INFO'] ?? ''; $pathArr = explode('/', trim($pathInfo, '/')); // 匹配帖子详情路由 if (count($pathArr) >= 2 && $pathArr[0] === 'post') { $postId = $pathArr[1]; // 引入原post.php的帖子详情渲染逻辑即可 require 'post_detail.php'; exit; } // 其他页面的逻辑写在这里 ?>
最终生成的URL格式为http://localhost/mywebsite/index.php/post/post1,如果你想要去掉URL里的index.php,只需要配合下面的服务器核心配置即可。
2. 服务器核心配置重写
直接修改服务器的主配置/虚拟主机配置,不需要创建.htaccess文件,性能比目录级的.htaccess更高。
- Apache服务器配置示例(虚拟主机段内添加):
RewriteEngine On RewriteRule ^post/([a-zA-Z0-9_-]+)$ post.php?post=$1 [L]
- Nginx服务器配置示例(server段内添加):
location ~ ^/post/([a-zA-Z0-9_-]+)$ { rewrite ^/post/([a-zA-Z0-9_-]+)$ /post.php?post=$1 break; }
配置完成后重启服务器即可,最终URL格式为http://localhost/mywebsite/post/post1,和.htaccess实现的效果完全一致。
3. 前端路由方案
如果你的站点采用前后端分离架构或者需要无刷新跳转,可以使用前端路由实现,不需要后端配置重写规则:
- 哈希路由(无需后端配合,刷新也不会404):
链接写法:
<a href="#/post/<?php echo $post_detail['id'] ?>"> <div class="post-card"> [post content] </div> </a>
前端监听hash变化加载内容:
window.addEventListener('hashchange', loadPost); // 页面初始化时也执行一次 window.addEventListener('load', loadPost); function loadPost() { const hash = window.location.hash.slice(1); if (hash.startsWith('/post/')) { const postId = hash.split('/')[2]; // 发起接口请求拉取帖子内容渲染即可 fetch(`/api/get_post.php?id=${postId}`) .then(res => res.json()) .then(data => { document.querySelector('#post-container').innerHTML = data.content; }) } }
最终生成的URL格式为http://localhost/mywebsite/#/post/post1。
内容的提问来源于stack exchange,提问作者harish
相关产品推荐
相关产品推荐

