重写从URL中删除查询字符串并重定向的规则

时间:2012-05-06 21:01:40

标签: php .htaccess mod-rewrite redirect http-status-code-301

有人通过在我的网站上以随机页面添加问号和随机字符来创建错误的链接:

  • www.mydomain.com/ ?57237933 (仅限数字)
  • www.mydomain.com/folder1/ ?709d0c24941 (附信件)
  • www.mydomain.com/folder1/page-name/ ?20?9h572 (双问号)

我找到了robots.txt的阻止规则,但需要更强大的htaccess解决方案。我正在寻找一个htaccess重写规则,可以从任何网址中删除?及其后面的所有内容,将访问者重定向到原始网址。

我找到了要移除的解决方案,例如?id=123,但当id=不存在时,我找不到解决方案。

2 个答案:

答案 0 :(得分:0)

我现在无法测试,但我认为这将是您问题的解决方案。

RewriteRule   ^([^?]+)\?.*$ $1 [L]

请验证并告诉我它是否正常。

答案 1 :(得分:0)

以下两条规则检查是否存在查询字符串并重定向到页面的无查询字符串版本:

RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*) /$1? [R,L]

由于您担心搜索引擎会抓取错误版本的网页,因此请在测试后考虑更改为R=301。此外,您可能需要考虑返回404错误以阻止查询字符串的使用,并告诉搜索引擎不存在http://mydomain.com/page/?1234这样的事情。