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

我的 .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

我怎样才能做到这一点?


幕布斯7119047
浏览 63回答 1
1回答

天涯尽头无女友

RewriteCond&nbsp;%{QUERY_STRING}&nbsp;^(.*)&?htTargUrl=[^&]+&?(.*)$&nbsp;[NC] RewriteRule&nbsp;^/?(.*)$&nbsp;/$1?%1%2&nbsp;[R=301,L]您发布的规则本身应该已经满足您的要求,并从请求的 URL 中删除&nbsp;htTargUrl=<something>&nbsp;URL 参数。但是,您需要避免从重写的 URL 中删除 URL 参数 - 这就是此处发生的情况。您可以使用附加条件来执行此操作,以仅定位直接请求,而不定位重写请求。例如:RewriteCond&nbsp;%{ENV:REDIRECT_STATUS}&nbsp;^$ RewriteCond&nbsp;%{QUERY_STRING}&nbsp;^(.*)&?htTargUrl=[^&]+&?(.*)$&nbsp;[NC] RewriteRule&nbsp;^/?(.*)$&nbsp;/$1?%1%2&nbsp;[R=301,L]此规则还需要位于.htaccess&nbsp;文件顶部附近、在&nbsp;现有重写之前。通过检查REDIRECT_STATUS&nbsp;环境变量,我们确保仅重定向直接请求。&nbsp;REDIRECT_STATUS&nbsp;在初始请求时为空,并设置为“200” (如 200 OK HTTP 响应代码)在第一次成功重写之后。您需要确保清除浏览器缓存,因为任何错误的 301(永久)重定向都将被浏览器缓存。 (因此,建议首先使用 302 - 临时 - 重定向进行测试。)
打开App,查看更多内容
随时随地看视频慕课网APP