如何使用.htaccess重写URL,将/search/?query=xxx转为/search/xxx/格式
实现URL重写的.htaccess配置方案
前置要求
- 确保Apache服务器已开启
mod_rewrite扩展 - 站点配置中的
AllowOverride参数已设置为All,允许.htaccess文件生效
完整配置代码
RewriteEngine On # 旧带参URL 301永久重定向到美观URL格式 RewriteCond %{QUERY_STRING} ^query=([^&]+)$ RewriteRule ^search/$ /search/%1/? [R=301,L] # 美观URL内部重写为后端可识别的带参格式 RewriteRule ^search/([^/]+)/?$ /search/?query=$1 [L]
规则说明
- 第一部分规则作用:用户访问
/search/?query=anything格式的旧地址时,会自动301跳转到/search/anything/格式的新地址,地址栏同步更新- 规则末尾的
?作用是清除原URL携带的查询字符串,避免跳转后地址保留?query=xxx后缀 - 测试阶段可将
R=301改为R=302使用临时重定向,避免浏览器缓存错误规则影响调试
- 规则末尾的
- 第二部分规则作用:用户访问
/search/anything/格式的新地址时,服务器内部会将请求转发到/search/?query=anything处理,地址栏不会发生变化,保证后端逻辑可以正常获取query参数
适配调整提示
如果你的搜索功能对应的实际处理文件是search.php,将第二部分规则的目标地址改为/search.php?query=$1即可。
内容的提问来源于stack exchange,提问作者MJWEB
相关产品推荐
相关产品推荐

