【问题标题】:Redirect Encoded URLs to homepage将编码的 URL 重定向到主页
【发布时间】:2016-06-01 12:50:35
【问题描述】:

我们网站上的 URL 编码存在问题,导致 URL 如下:

ros%C3%A9-wine.php

现在站点地图文件中已将其替换为正确的:

玫瑰酒.php

但是,由于这些 URL 非常流行,我们现在在 Google 上有重复的页面以及许多带有编码 ë 等的页面。

有没有办法使用 htaccess 将任何编码的 URL 重定向到主页?

谢谢,

瑞克

【问题讨论】:

标签: php .htaccess redirect


【解决方案1】:

您可以在 htaccess 中进行以下重定向:

RewriteEngine on

RewriteCond %{THE_REQUEST} /ros%3C%A9-wine\.php [NC] 
RewriteRule ^ / [R=301,L]

这会将 uri /ros%3C%A9-wine.php 永久重定向到 /

如果有多个类似的 uri 需要重定向,你可以使用这个:

RewriteEngine on

RewriteCond %{THE_REQUEST} /.*%3C|%A9.*\sHTTP [NC] 
RewriteRule ^ / [R=301,L]

【讨论】:

  • 如果 OP 在他的站点地图中有 100 万个错误 URL 怎么办?
  • 仍然,该重定向不会将用户重定向到正确的地址 - 它只会重定向到主页。我不认为这是目标。
  • 不是 100 万个 URL,但肯定有几千个 :) 将页面 301 化到主页可能是最好的解决方案,因为没有编码的 URL 会被 Google 索引。编码不仅是 e,还有大量非英文字符,有没有办法一次性处理所有这些,或者仅仅是编写数百个重定向的情况?
  • @RickEvans 一次性重定向它,你应该使用我的回答中描述的 php 脚本。
【解决方案2】:

因为你可以!对于这个例子,它可以是

Redirect ros%C3%A9-wine.php rose-wine.php

当然,您可以手动编写它,甚至可以使用程序创建 .htaccess,但如果有很多这样的 URL,我建议编写一个简单的重定向程序,将 ë 等所有字符替换为相应的拉丁字符。

<?
  $url=$_SERVER['REQUEST_URI'];
  $url2=str_preplace('%C3%A9','e');//repeat as many times for other chars as you need
  if($url!=$url2)//URL was wrong
  {
    Header('Location: '.$url2)//redirect user to correct URL
    exit();
   }
?>

【讨论】:

  • 这是一个 PHP 而不是 .htaccess 解决方案,因此此解决方案可能需要 OP 通过 PHP 文件(例如 mod_rewrite 或类似文件)运行其所有 URL。我不确定 OP 目前是否这样做,这将是一个复杂的建立
  • @Martin 正如我已经提到的,OP 可以使用一个大的 .htaccess 文件来管理它,但这将是一个冗长、手动和丑陋的方法。
猜你喜欢
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2015-10-01
相关资源
最近更新 更多