Htaccess和PHP重定向,找不到页面

时间:2014-06-26 13:06:01

标签: php apache .htaccess mod-rewrite redirect

我有一个重定向的问题,使用PHP我将301重定向到此URL(vars来自搜索表单):

ddddd.com/ads-CATEGORY-CITY/?var1=1&var2=2 (many vars here, not a fixed number, also the URL can have 0 "extra vars" so it will end at the second "/")

从这个丑陋的网址:

ddddd.com/ads.php?type=CATEGORY&c=CITY&var1=1&var2=2

在我的头文件中,我有重定向的代码:

function redirect() {
    if($_SERVER["QUERY_STRING"]=="") return false;  
    if(strpos($_SERVER["REQUEST_URI"], '/ads.php')!==false) return false;

    $rewrittenURL = "ads-";
    $appendVars = "?";

    if(isset($_GET["type"])&&$_GET["type"]!="") $rewrittenURL .= $_GET["type"]."-";
    if(isset($_GET["c"])&&$_GET["c"]!="")  $rewrittenURL .= $_GET["c"]."/"; 

    if(isset($_GET["var1"])&&$_GET["var1"]!="") $appendVars .= "var1=".$_GET["var1"]."&";
    if(isset($_GET["var2"])&&$_GET["var2"]!="") $appendVars .= "var2=".$_GET["var2"]."&";
    [... more vars here ...]

    $appendVars = substr($appendVars, 0, -1);

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://ddddd.com/'.$rewrittenURL.$appendVars);
}
if(PAGE=="ads.php") redirect();

我的htaccess看起来像这样:

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^type=([^&]+)&c=([^&]+)&?(.*)$
RewriteRule ^ads.php$ /ads-%1-%2/?%3 [L,R=301]

我得到一个无限循环:)我也尝试过这个:

RewriteRule ^ads-(.*)-(.*)/(.*)$ ads.php?tip=$1&j=$2&$3 [QSA,L]

相同的循环...我需要一些有更多经验的人的帮助:)

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以通过将此代码放入htaccess中来完成所有操作(您不再需要PHP)

RewriteEngine on

RewriteCond %{THE_REQUEST} \s/app/ads\.php\?type=([^&]+)&c=([^&]+)&?([^\s]+)?\sHTTP/ [NC]
RewriteRule . /app/ads-%1-%2/?%3 [R=301,L]

RewriteRule ^ads-([^\-]+)-([^\-]+)/$ /app/ads.php?type=$1&c=$2 [L,QSA]