0

如何在 URL 中重定向多个 bad/adults 关键字?

我试图用 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 做到这一点吗?

4

2 回答 2

2

当然可以用PHP来做......我只是不确定这是一个好主意。您可以将每个请求重定向到 PHP 页面,explode $_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";
}
?>
于 2013-08-05T19:21:03.360 回答
0

如果您的网站有入口点,例如通过 index.php,您可以定义带有坏词的数组,使用您的数组在 url 中搜索这个词,如果发现坏词,则重定向到正确的 url。在 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');
...
于 2013-08-05T21:50:58.330 回答