通过htaccess从外部链接更正错误的查询字符串

时间:2012-05-07 20:07:42

标签: regex .htaccess redirect rewrite hyperlink

有外部链接指向我的网站(我无法控制),其中包含错误的查询字符串。这是一个例子:

http://www.example.com/page/&query=string

以上结果是我网站上的404页面。由于我的网站上存在“http://www.example.com/page/”,因此我想使用.htaccess文件删除任何错误的查询字符串,以便用户可以获得正确的内容。

所以我想要重写或重定向:

http://www.example.com/page/&query=string  -> http://www.example.com/page/

感谢任何和所有帮助!

1 个答案:

答案 0 :(得分:1)

以下内容应如您所说,向请求浏览器发出301重定向。

RewriteCond %{QUERY_STRING} query=string
RewriteRule ^/page/ /page/ [R=301]

但是,您只想提供正确的内容,可以避免301重定向:

RewriteCond %{QUERY_STRING} query=string
RewriteRule ^/page/ /page/ [PT,NS,E=QUERY_STRING:]

它将完全删除QUERY_STRING,因此请注意。

如果你想重写一些不同的查询字符串,而不是全部用于/ page /

RewriteCond %{QUERY_STRING} query=badstring1 [OR]
RewriteCond %{QUERY_STRING} query=badstring2 [OR]
RewriteRule ^/page/ /page/ [PT,NS]

所有RewriteRules都假设您在某处有“RewriteEngine On”,您的主机可能已完成此操作。它还需要Apache中的mod_rewrite模块,我假设它是基于.htaccess请求使用的。

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

所有人都说这看起来非常不必要,因为如果页面不需要它们会忽略参数,除非当然这是传递给脚本的,在这种情况下你应该能够在代码中处理它,但也许你有一个导致问题的框架。

这是一本关于这个主题的好书: Pro Apache 见第277-299页