2015-10-20 4 views
0

в моем онлайн-проекте теперь я изменяю свой контент, и поэтому мне тоже нужно изменить ссылку. но для ссылок, которые уже зарегистрированы в Google, я должен это сделать. если сервер получит такой запрос.

$_SERVER["REQUEST_URI"]="http://example.com/category/?company=listof_ele_top_manufacturers"; 

Я хочу перенаправить его.

$_SERVER["REQUEST_URI"]="http://example.com/category/?company=listof.ele.top.manufacturers"; 

и company = many deffrent values. поэтому, я хочу изменить свой url с помощью _ (подчеркивание) . (точка), поэтому URL-адрес должен измениться с точкой, где он имеет знак подчеркивания. если решение поставляется с .htaccess, то изменение файла будет приятным. Я уже изменил свой файл .htaccess.

RedirectMatch 301 ^/com/ http://www.example.com/category/ 

это перенаправление моего имени каталога, но не charecter, о котором я упоминал выше.

+3

Вы даже попытались выполнить Google «php replace char in string»? (В комментарии ниже показан первый результат поиска, если вы его не видите) –

+0

http://php.net/manual/en/function.str-replace.php – jvv

+0

yes. он отображает страницу перенаправления, каталог и домен. не для charecter. –

ответ

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 
+0

Это отображение в строке url продолжается. ? Компания = listof.ele.top.производители & company = listof.ele.top.manufacturers & company = listof.ele.top.manufacturers & company = listof.ele.top.manufacturers & company = listof.ele.top.manufacturers .... –

+0

Я отредактировал ans, очистите кэш вашего браузера и попробуйте – starkeen

+0

сначала с той же проблемой, где вторая перенаправляет меня на домашнюю страницу www.example.com –

0

Там вы идете:

смешанный str_replace (смешанный $ поиск, смешанный $ заменить, смешанные $ предмет [, Int & $ число])

Так что это будет так:

$new_uri = str_replace("_",".",$_SERVER["REQUEST_URI"]); 
header('Location: '.$new_uri); 

Ref: PHP:str_replace

+0

Это не будет работать на 'example.com/file.html? Parameters' –

+0

Почему ?, он просто хочет заменить все символы подчеркивания точками, ссылка, которую вы предложили, не нуждается в каких-либо модификациях. – MaveRick

+0

Да, мой пример был неправильным. Рассмотрим это: '/ some_directory /? Parameters'. Если он решит изменить часть URL-адреса, он не будет вести себя правильно. –

0

перед любым перенаправлять вам просто нужно проверить, если «компания» пары имеют подчеркивание в нем, если да URL перенаправляются

<?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 
} 
?> 
+0

Было бы неплохо проверить, '' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ isset() –

0

Может быть то, что вы пропустили была [ «QUERY_STRING»] переменный $ _SERVER.

/* 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"); 
Смежные вопросы