0

我正在尝试创建一个重写规则,该规则将忽略任何其他 URL 查询/参数,并仅根据路径进行重定向。

我的公司有一个 Wifi Hotspot 服务,它会做一些 DNS 路由技巧来强制人们在使用它之前登录。不幸的是,当人们从 WiFi 断开连接并返回到他们的正常蜂窝数据服务时,有时 URL 请求仍会发送到我们的主机,它显示为:

www.ourwebsite.com/login?dst=http://www.google.com/m?client=ms-android-verizon&source=android-home

我已经编写了一组规则来处理 /login 和 /login/ 的基本路径以重定向到我们的主页,

RewriteCond %{THE_REQUEST} ^.*\/login/\ HTTP/
RewriteRule ^(.*)login/?$ "/$1" [R=301,L]
RewriteCond %{THE_REQUEST} ^.*\/login\ HTTP/
RewriteRule ^(.*)login?$ "/$1" [R=301,L]

但我无法想出一个适当的字符串来始终在路径上重定向基于灵魂,并忽略可能会或可能不会出现的任何查询参数。

任何帮助将不胜感激!提前致谢。

4

2 回答 2

1

如果我理解正确,应该这样做:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^login    /?   [R=301,L]

只要传入的 URL 是这样的,这个规则集就会重定向到 root:

http://www.ourwebsite.com/login?any_query

于 2013-03-14T18:47:06.037 回答
1

从 Apache 2.4.0 开始,您可以将QSD-flag 应用于规则。

当请求的 URI 包含查询字符串而目标 URI 不包含时,RewriteRule 的默认行为是将该查询字符串复制到目标 URI。使用 [QSD] 标志会导致查询字符串被丢弃。-- https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_qsd

当将此标志用于早期 Apache 版本时,您将导致500 Internal Server Error.

于 2015-11-17T09:04:18.880 回答