如何使用.htaccess移除查询字符串并改写URL?
解决.htaccess移除查询字符串并美化URL的问题
没问题,我来帮你搞定这个URL美化的需求!你需要在.htaccess里配置两组规则:一组是将旧的带查询参数的URL永久重定向到新的干净URL(对SEO友好,避免重复内容),另一组是把新的干净URL内部转发到原有的category脚本,这样服务器能正确处理请求。
完整的.htaccess配置
把下面的代码放到你的网站根目录的.htaccess文件里(如果没有就新建一个):
# 开启URL重写引擎 RewriteEngine On # 1. 将旧URL(带?id=XXX)重定向到新URL(/XXX/) # 匹配category路径且带id查询参数的请求 RewriteCond %{QUERY_STRING} ^id=([^&]+)$ RewriteRule ^category$ /newsite/%1/? [R=301,L] # 2. 将新URL(/XXX/)内部重写到原category脚本带查询参数 # 匹配根目录下的分类名称(字母数字等),转发到category?id=XXX RewriteRule ^([A-Za-z0-9-]+)/$ category?id=$1 [L]
规则解释
重定向规则:
RewriteCond %{QUERY_STRING} ^id=([^&]+)$:检查查询字符串是否是id=XXX的格式,捕获XXX部分到%1RewriteRule ^category$ /newsite/%1/? [R=301,L]:匹配请求路径是category的URL,重定向到/newsite/XXX/,R=301表示永久重定向(利于SEO),?用来移除原查询字符串,L表示这是最后一条规则
内部重写规则:
RewriteRule ^([A-Za-z0-9-]+)/$ category?id=$1 [L]:匹配类似/News/、/Entertainment/的路径,把捕获的分类名称传到category脚本的id参数,L确保不再执行后续规则
注意事项
- 确保你的服务器已经启用了
mod_rewrite模块(Apache默认一般是开启的,如果没开需要联系主机商或修改配置) - 测试前请清除浏览器缓存,因为301重定向会被浏览器缓存,可能导致旧的缓存结果影响测试
- 如果你的网站不在
/newsite子目录(而是根目录),把重定向规则里的/newsite/%1/?改成/%1/?即可
内容的提问来源于stack exchange,提问作者Dipak
相关产品推荐
相关产品推荐

