为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 .htaccess 从 url 中删除 get 参数?

如何使用 .htaccess 从 url 中删除 get 参数?

PHP
幕布斯7119047 2023-12-15 15:05:31
我的 .htaccess 文件更改(例如)example.com/brands/beams/... 为 example.com/php/mvc.php?htTargUrl=brands/beams/... 以及 QSA规则。规则如下:RewriteRule ^(.+)$ php/mvc.php?htTargUrl=$1 [QSA,L,B,BNP,NC]我需要从原始网址中删除 htTargUrl 参数。例如: example.com/brands/beams/?htTargUrl=beams&par2=val 至 example.com/brands/beams/?par2=val。我尝试了很多规则来执行此操作,但没有一个适用于查询字符串。 如果我使用RewriteCond %{QUERY_STRING} ^(.*)&?htTargUrl=[^&]+&?(.*)$ [NC] RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]则参数不仅从原始链接中删除,而且 URL 变为example.com/php/mvc.php。我怎样才能做到这一点?
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

RewriteCond %{QUERY_STRING} ^(.*)&?htTargUrl=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]

您发布的规则本身应该已经满足您的要求,并从请求的 URL 中删除 htTargUrl=<something> URL 参数。

但是,您需要避免从重写的 URL 中删除 URL 参数 - 这就是此处发生的情况。您可以使用附加条件来执行此操作,以仅定位直接请求,而不定位重写请求。

例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^(.*)&?htTargUrl=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]

此规则还需要位于.htaccess 文件顶部附近、 现有重写之前。

通过检查REDIRECT_STATUS 环境变量,我们确保仅重定向直接请求。 REDIRECT_STATUS 在初始请求时为空,并设置为“200” (如 200 OK HTTP 响应代码)在第一次成功重写之后。

您需要确保清除浏览器缓存,因为任何错误的 301(永久)重定向都将被浏览器缓存。 (因此,建议首先使用 302 - 临时 - 重定向进行测试。)


查看完整回答
反对 回复 2023-12-15
  • 1 回答
  • 0 关注
  • 56 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信