如何通过htaccess将URL中的ID重写为名称,解决名称URL无法访问问题
修复方案
你当前的重写规则存在路径适配、业务逻辑匹配两类问题,按以下步骤操作即可解决:
- 先确认Apache已经开启
mod_rewrite模块,站点配置中AllowOverride参数设置为All,保证.htaccess规则能正常被加载。 - 如果你将
.htaccess文件放在项目的new子目录下,替换完整规则为以下内容:
RewriteEngine On # 文章详情页重写:匹配/new/[标识]格式的请求 RewriteRule ^([0-9a-z]+)/?$ news-details.php?nid=$1 [NC,L,QSA] # 分类页重写:匹配/new/category/[标识]格式的请求 RewriteRule ^category/([0-9a-z]+)/?$ category.php?catid=$1 [NC,L,QSA]
- 如果你将
.htaccess放在站点根目录而非new子目录下,使用以下规则:
RewriteEngine On RewriteRule ^new/([0-9a-z]+)/?$ /new/news-details.php?nid=$1 [NC,L,QSA] RewriteRule ^new/category/([0-9a-z]+)/?$ /new/category.php?catid=$1 [NC,L,QSA]
- 业务逻辑适配:你当前的规则是直接把URL中的标识传给参数,如果URL里用的是文章/分类的文字别名而非数字ID,需要修改
news-details.php和category.php的查询逻辑,增加别名到数字ID的映射查询,否则代码直接拿别名当数字ID查库会返回空内容,这是访问带名称URL无法加载内容的最常见原因。
内容的提问来源于stack exchange,提问作者Root
相关产品推荐
相关产品推荐

