如何在网址中重定向多个不良/成人关键字?
我试图用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执行此操作?
答案 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');
...