如何移除URL中的?id=参数?已通过.htaccess去除.php后缀
解决URL中隐藏ID参数的问题
先排查你之前的错误
你写的规则RewriteRule ^([^.]+)/?$ bloge.php?id=$1 [L, QSA]有两个问题:
- 拼写错误:
bloge.php应该是article.php - 规则范围太宽:
^([^.]+)会匹配所有不带点的路径(包括你已经设置好的/blog),导致服务器循环重写,触发500错误
正确的.htaccess配置步骤
假设你已经有去掉.php后缀的规则,现在添加针对文章页面的重写规则:
# 开启重写引擎 RewriteEngine On # 去掉.php后缀的规则(如果已存在就保留) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^\.]+)$ $1.php [NC,L] # 处理article的友好URL:把/article/27映射到/article.php?id=27 RewriteRule ^article/(\d+)/?$ article.php?id=$1 [NC,L,QSA] # 可选:把旧的/article?id=27重定向到新的友好URL,避免重复内容 RewriteCond %{QUERY_STRING} ^id=(\d+)$ RewriteRule ^article$ /article/%1? [R=301,L]
修改前端链接
把代码里原来的<a href="article.php?id=27">改成:
<a href="/article/27">文章标题</a>
这样用户点击后地址栏就会显示https://example.com/article/27,而不是带?id=的形式。
PHP代码无需修改
你的article.php里依然可以用$_GET['id']获取文章ID,重写规则已经把URL中的数字传递给了id参数。
内容的提问来源于stack exchange,提问作者Alexis Nimubona
相关产品推荐
相关产品推荐

