最后带有符号“%”的URL会出现http错误,如何使用htaccess阻止它?

时间:2012-10-25 14:12:27

标签: .htaccess

我对来自acces_log的一些网址有疑问。有一些来自外部网站的网址链接我,例如http://domain.com/url_name.htm%(是的,带有%)。

然后......我的服务器返回http错误,我需要将这个假URL重定向到正确的方式,我想在htaccess中。

我只需要检测URL的最后一个字符中的%符号,并在没有它的情况下重定向。 http://domain.com/url_name.htm% - > http://domain.com/url_name.htm

我该怎么做?我试着用一些样品吗?符号,但我没有幸运。

谢谢!

2 个答案:

答案 0 :(得分:1)

我已经找到了错误......

似乎某些格式错误的网址没有传递给vhost,然后这些请愿文件没有读取.htaccess。

解决这个问题的唯一方法是在httpd.conf中添加ErrorDocument 400指令...不是具有不同虚拟主机的服务器的最佳选择..因为所有的都会有相同的行为...但我认为这是这种情况的唯一方法。

来自Apache documentation的报价:

  

虽然可以覆盖大多数错误消息,但在某些情况下,无论ErrorDocument的设置如何,都会使用>内部消息。特别是,如果检测到>格式错误的请求,则将立即停止正常请求处理并返回>内部错误消息。这对于防止由不良请求引起的安全问题是必要的。

非常感谢!!

答案 1 :(得分:0)

此页面对.htaccess规则非常有帮助。 http://www.helicontech.com/isapi_rewrite/doc/RewriteRule.htm

我看到了一些使用小型PHP脚本的解决方案。 IE这个替换#

.htaccess
RewriteRule old.php redirect.php?          url=http://example.com/new.php|hash      [R=301,QSA,L]

redirect.php
<?php
$new_url = str_replace("|", "#", $_GET['url']);
header("Location: ".$new_url, 301);
die;
?>