我的 .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 - 临时 - 重定向进行测试。)
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报
0/150
提交
取消