我有一个重定向的问题,使用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]
相同的循环...我需要一些有更多经验的人的帮助:)
谢谢!
答案 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]