2013-03-14 83 views
0

我试图创建一个重写规则,它将忽略任何其他URL查询/参数,并只是基于路径重定向。Apache重写规则,忽略查询/参数,始终基于路径重定向

我的公司有一个Wifi Hotspot服务,它可以执行一些DNS路由技巧,强制用户在使用之前先登录。不幸的是,当人们获得从WiFi断开,并回落到正常细胞的数据服务,有时一个URL请求仍然被发送到我们的主机,它显示为:

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

我已经写了一套规则,以护理/登录和/登录/的基路径重定向到我们的主页,

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

,但我有想出适当的字符串麻烦始终重定向路径上souly为主,而忽略任何查询参数可能会或可能不会来。

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

回答

1

如果我的理解没错,这样的事情应该这样做:

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

此规则集将重定向只要以root身份进入的网址是一样的东西:

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

+0

啊,很好!是的,这正是我所要找的,谢谢一堆! – 2013-03-15 16:16:10

0

从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