$ _SERVER [“REQUEST_URI”]替换字符串或字符

时间:2015-10-20 07:43:22

标签: php .htaccess

在我的在线项目中,现在我改变了我的内容,因此,我也必须更改链接。但是,对于谷歌已注册的链接,我必须这样做。如果服务器得到这样的请求。

$_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/

它重定向我的目录名,但不是我上面提到的字符。

4 个答案:

答案 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);

参考:PHP:str_replace

答案 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");