在我的在线项目中,现在我改变了我的内容,因此,我也必须更改链接。但是,对于谷歌已注册的链接,我必须这样做。如果服务器得到这样的请求。
$_SERVER["REQUEST_URI"]="http://example.com/category/?company=listof_ele_top_manufacturers";
我想将其重定向到。
$_SERVER["REQUEST_URI"]="http://example.com/category/?company=listof.ele.top.manufacturers";
和公司=许多不同的价值观。所以,我想用_(下划线)更改我的网址 to。(dot)所以url应该用dot来改变它有下划线。如果解决方案附带.htaccess文件更改将很好。我已经用这个改变了我的.htaccess文件。
RedirectMatch 301 ^/com/ http://www.example.com/category/
它重定向我的目录名,但不是我上面提到的字符。
答案 0 :(得分:1)
在你的htaccess中试试这个:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^company=([^_]+)_([^_]+)_([^_]+)_([^&]+)$ [NC]
RewriteRule ^ /category/?company=%1.%2.%3.%4 [QSA,NC,L,R]
或尝试:
RewriteEngine on
RewriteCond %{THE_REQUEST} /category/\?company=([^_]+)_([^_]+)_([^_]+)_([^&\s]+) [NC]
RewriteRule ^ /category/?company=%1.%2.%3.%4 [QSA,NC,L,R]
这将重定向
/?company=foo_bar_foobar
到
/?company=foo.bar.foobar
答案 1 :(得分:0)
你去了:
混合str_replace(混合$ search,混合$ replace,混合$ subject [,int& $ count])
所以它会是这样的:
$new_uri = str_replace("_",".",$_SERVER["REQUEST_URI"]);
header('Location: '.$new_uri);
答案 2 :(得分:0)
在任何重定向之前,您只需要检查“公司”参数是否有下划线,如果是,则重定向该网址
<?php
$company = $_GET['company'];
if (preg_match('/_/', $company)) {
// contains an underscore, redirect to new url here, using str_replace function
} else {
// does not contain any underscore
}
?>
答案 3 :(得分:0)
你可能错过的是$ _SERVER ['QUERY_STRING']变量。
/* see http://stackoverflow.com/a/6975045/3132718 */
$url = strtok($_SERVER["REQUEST_URI"],'?');
/* add the parameter part */
$url .= str_replace("_", ".", $_SERVER['QUERY_STRING']);
header("Location: $url");