重定向奇怪的URL,其中包含两个句点

时间:2016-08-09 13:54:02

标签: apache mod-rewrite

我有一个静态HTML网站,我最近转换为drupal。我一直在监控我的网站404网站管理员工具和drupal报告中的错误,并注意到谷歌索引了奇怪的网址。我猜他们是来自旧的静态HTML网站不正确地创建的相对链接。

这是一个例子: www.example.com/items ../项-page.html中

实际页面是: www.example.com/items/item-page.html

新的drupal网站甚至没有.html扩展名。我正在使用网址重定向和路径自动模块,并重定向所有旧网址的设置,以确保它们是新的网址结构(例如www.example.com/items/item-page.html)请到301 www.example.com/items/item-page)。

我可以访问服务器,所以我在apache httpd.conf文件而不是.htaccess中进行重定向。我尝试使用以下代码将../重定向到/但我没有运气:

RewriteRule ^\.\./(.*) /$1 [R=301,NC,L]

当我转到带有../的网址时,此规则不会执行任何操作。是否有可以匹配../的重写符并将其从任何网址中删除?

注意:我在apache httpd.conf中有其他重定向工作正常...例如:

RewriteRule ^items/pdf/(.*)$ /sites/default/files/documents/items/$1 [R=301,NC,L]

所以我不认为它是我的服务器配置。

编辑: 我注意到上面重写pdf目录的重写规则甚至可以在URL中使用..例:     http://www.example.com/items../pdf/somedocument.pdf 重定向到     http://www.example.com/sites/default/files/documents/items/somedocument.pdf 所以看起来......在重写规则中被完全忽略了,这就是为什么我无法获得任何工作的原因。有没有人知道这方面的方法?

3 个答案:

答案 0 :(得分:0)

  1. 我相信你需要逃避正斜线。
  2. 我相信rewriterule会对HTTP请求URI起作用,而不是页面链接。 因此,我相信您需要删除克拉以找到匹配项,并分析您的故意网址,看看是否会对其他地方产生负面影响。

答案 1 :(得分:0)

您可以使用此

RewriteRule ^/items\.\.(.+)$ /items/$1 [L,R]

这会将 /items..foobar 重定向到 / items / foobar

答案 2 :(得分:0)

能够使用apache中的重写规则解决问题,原因是重写规则未在网址中找到“..”,原因不明。

我的解决方案是创建一个自定义drupal模块,查看“..”是否在URL中。如果找到“..”字符串,那么我将它设置为使用内置的drupal函数重定向到没有“..”的url。这是我在模块中使用的代码。

function doubledot_fix_init() {
    $destination = drupal_get_destination();
    $alias = drupal_get_path_alias($destination['destination']);
    $fixpath = str_replace("..", "", $alias, $count);
    if ($count > 0) {
        drupal_goto($fixpath, array(), 301);
    }
}

我认为这个修复程序没有任何理由会破坏任何内容,因为“..”永远不应该在任何URL中找到。如果有人能够想到这个问题可能导致问题,或者您知道更好的解决方案,请告诉我。