在网址中重定向坏/成人关键字

时间:2013-08-05 17:20:36

标签: php .htaccess

如何在网址中重定向多个不良/成人关键字?

我试图用htaccess来做,但我不认为这对很多关键字有好处

示例:

http://example.com/mp3/sex-with-me/page/1 重定向到 http://example.com/mp3/with-me/page/1

http://example.com/video/selena-gomes-porn/page/1 重定向到 http://example.com/video/selena-gomes/page/1

来自htaccess文件的一些代码:

RewriteRule ^mp3/(.*)-sex/page/(.*)?$ http://site.com/mp3/$1/page/$2  [R=301,L] 
RewriteRule ^mp3/(.*)-sex-(.*)/page/(.*)?$ http://site.com/mp3/$1-$2/page/$3 [R=301,L] 
RewriteRule ^mp3/sex-(.*)/page/(.*)?$ http://site.com/mp3/$1/page/$2 [R=301,L]

RewriteRule ^video/(.*)-porn/page/(.*)?$ http://site.com/video/$1/page/$2  [R=301,L] 
RewriteRule ^video/(.*)-porn-(.*)/page/(.*)?$ http://site.com/video/$1-$2/page/$3 [R=301,L] 
RewriteRule ^video/porn-(.*)/page/(.*)?$ http://site.com/video/$1/page/$2 [R=301,L]

是否可以使用PHP执行此操作?

2 个答案:

答案 0 :(得分:2)

有可能用PHP做,当然......我只是不确定这是个好主意。您可以将每个请求重定向到PHP页面,展开$_SERVER['REQUEST_URI'],运行一些正则表达式,然后继续到页面。

我看到一些重大问题。首先,为什么要更改URI但仍然允许访问该站点?如果这是您自己的站点,则应在创建URI之前过滤这些单词。如果这应该是代理,那么为什么允许访问URI中带有标记字词的网站? (特别是因为有许多更好的方法可以拒绝访问不适当的材料,而不是基于URI的PHP过滤)

其次,你对米德尔塞克斯镇或运动员盖伊先生怎么办?如果堤坝沿着密西西比河断裂怎么办?如果有人正在写关于电子阅读器(Nook,即),你也可能遇到问题。我可以通过添加一些连字符或其他垃圾字符来绕过你的过滤器。基本上,基于URI内容的过滤是非常有问题的,并且不太可能工作得很好。

如果你想在PHP中这样做,它可能是这样的:

<?php
$uri_component = explode('/',$_SERVER['REQUEST_URI']);
foreach($uri_component as $fragment){
    if(preg_match('/regex/',$fragment) echo "BAD WORD";
}
?>

答案 1 :(得分:0)

如果您的网站有例如通过index.php的入口点,您可以使用错误的单词定义数组,使用您的数组在网址中搜索此单词,如果找到错误的单词,则重定向到右侧网址。 在index.php中:

<?php
$badWords = array('sex','prOn','etc');
$uriParts = explode('/',$_SERVER["REQUEST_URI"]);

// build preg with bad words
$preg = '/'.implode('|',$badWords).'/is';
foreach ($uriParts as $k=>$part)
{
  $uriParts[$k]=preg_replace($preg,'',$uriParts[$k]);
}

// if bad words were found
if($uri='/'.implode('/',$uriParts)!=$_SERVER["REQUEST_URI"])
{
  $newUrl = 'http://'.$_SERVER["SERVER_NAME"].$uri;
  // redirecting user to good url with http code 301
  header("HTTP/1.1 301 Moved Permanently");
  header('Location: '.$newUrl);
  exit();
}

如果您的网站有多个入口点,例如mp3.php,video.php等。 您可以在文件bad_words_guard.php :)中保存上面看到的代码,并将其包含在每个条目文件中:

<?php
require_once('path/to/bad_words_guard.php');
...