我有一个静态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 所以看起来......在重写规则中被完全忽略了,这就是为什么我无法获得任何工作的原因。有没有人知道这方面的方法?
答案 0 :(得分:0)
答案 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中找到。如果有人能够想到这个问题可能导致问题,或者您知道更好的解决方案,请告诉我。