Cделать, чтобы при редиректе id (номер) страницы оставался прежним а вся остальна

12
SO
На сайте с 17.03.2012
Offline
0
899

Вопрос о 301 редиректе. Как сделать, чтобы при редиректе id (номер) страницы оставался прежним а вся остальная часть кода менялась, и так с каждым id-шником, с каждым элементом, можно ли так сделать?

Есть такая статья:

используй 301 редирект

А если страниц тысячи, как сделать редирект в таком случае?
Нпшёл статью, правильно ли в ней описано всё?

Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа.

old_id INT
new_url VARCHAR (255)

Далее пишем код который свяжет ваши старые id с новыми URL-ами

После этого, добавляем следующую строчку в .htaccess:

RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2

затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

<?php
function getRedirectUrl($productid) {
// Connect to the database
$dServer = “localhost”;
$dDb = “mydbname”;
$dUser = “mydb_user”;
$dPass = “password”;

$s = @mysql_connect($dServer, $dUser, $dPass)
or die(“Couldn’t connect to database server”);

@mysql_select_db($dDb, $s)
or die(“Couldn’t connect to database”);

$query = “SELECT new_url FROM redirects WHERE old_id = “. $productid;
mysql_query($query);
$result = mysql_query($query);
$hasRecords = mysql_num_rows($result) == 0 ? false : true;
if (!$hasRecords) {
$ret = ’http://www.yoursite.com/’;
} else {
while($row = mysql_fetch_array($result))
{
$ret = ’http://www.yoursite.com/’. $row["new_url"];
}
}
mysql_close($s);
return $ret;
}

$productid = $_GET["productid"];
$url = getRedirectUrl($productid);

header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: $url”);
exit();
?>

Я бы с удовольствием это всё исользовала, но, по причине минимума знаний...конкретно интересует вот эта часть

Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа.

old_id INT
new_url VARCHAR (255)

Далее пишем код который свяжет ваши старые id с новыми URL-ами

Таблицу в базе создала, получилось что-то вроде того:

Table `testovaya`.`ide` has been created.
CREATE TABLE `testovaya`.`ide` (
`old_id` INT NOT NULL ,
`new_url` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;

не знаю, правильно или нет, и что делать дальше?

Если кто-то детально сможет расписать как это всё реализовать буду крайне благодарана - вопрос жизни и смерти.

Может есть какой-то другой способ решить изначальную задачу (чтобы менялось всё кроме айдишников)?

Заранее спасибо за ответы.

siv1987
На сайте с 02.04.2009
Offline
427
#1

Можно, но если с почти готовым примером не можете разобраться сами вы очевидно не справитесь. Принцип простой, получаем ид, запрашиваем из таблицы данные этому ид, если введенный адрес не соответствует отправляем на новый адрес.

Request:

/1-old_url.html

В таблице у нас:


id | new_url
---------
1 | new-url


preg_match( '#^/\d+-(.+)\.html$#', $_SERVER['REQUEST_URI'], $uri );

$r = mysql_query( 'SELECT * FROM redirects WHERE id='.intval($id) );
$row = mysql_fetch_assoc( $r );

if( $row['id'] )
{
if( $uri[1] != $row['new_url'] )
{
$new_url = "/{$id}-{$row['new_url']}.html";
header( 'Location: '.$new_url, true, 301 );
exit;
}
}
SO
На сайте с 17.03.2012
Offline
0
#2

То есть нет никакого способа объяснить это пошагово человеку, не знающему программирования: куда писать этот код (в какой файл) и тд, шаг за шагом?

Таблица, значить создана правильно?

S
На сайте с 17.03.2012
Offline
0
#3

так тебе чего надо сделать то? старые урлы сменить на новые, чтобы сохранялся id? тогда это одна строчка htaccess, зачем все эти таблицы и пхп скрипты. А если что то другое- объясние подробнее.

SO
На сайте с 17.03.2012
Offline
0
#4
Sederge:
так тебе чего надо сделать то? старые урлы сменить на новые, чтобы сохранялся id? тогда это одна строчка htaccess, зачем все эти таблицы и пхп скрипты. А если что то другое- объясние подробнее.

Вот именно так мне и надо - старые урлы на новые, а id сохранялся. Это счастье если не нужны таблицы и пхп, так какая строчка?

siv1987
На сайте с 02.04.2009
Offline
427
#5
SOAO:
То есть нет никакого способа объяснить это пошагово человеку, не знающему программирования:

Я вам уже дал больше половины рабочего кода. Пошагово можно объяснить только для конкретного случая - кмс, тип урл-ов. Вы кстати даже примеры не показали откуда, куда хотите редиректить. Может быть и вправду можно обойтись только мод реврайтом. Сформулируйте нормально задачу.

SO
На сайте с 17.03.2012
Offline
0
#6

Задача:

Надо сделать редирект со страниц http://test.loc/perv/index.php?SECTION_ID=25 на страницы http://test.loc/vtor/25/

ID при этом - любое число

siv1987
На сайте с 02.04.2009
Offline
427
#7
SOAO:
Задача:
Надо сделать редирект со страниц

RewriteEngine On

RewriteRule %{QUERY_STRING} ^SECTION_ID=(\d+)$

RewriteRule ^perv/index\.php$ /vtor/%1/ [R=301,L]

Вставьте в htaccess корня сайта.

SO
На сайте с 17.03.2012
Offline
0
#8
siv1987:
RewriteEngine On
RewriteRule %{QUERY_STRING} ^SECTION_ID=(\d+)$
RewriteRule ^perv/index\.php$ /vtor/%1/ [R=301,L]

Вставьте в htaccess корня сайта.

редиректит почему-то меня сюда:

...//test.loc/vtor//?SECTION_ID=25

siv1987
На сайте с 02.04.2009
Offline
427
#9

RewriteEngine On

RewriteRule %{QUERY_STRING} ^SECTION_ID=([0-9]+)$

RewriteRule ^perv/index\.php$ /vtor/%1/? [R=301,L]

SO
На сайте с 17.03.2012
Offline
0
#10
siv1987:
RewriteEngine On
RewriteRule %{QUERY_STRING} ^SECTION_ID=([0-9]+)$
RewriteRule ^perv/index\.php$ /vtor/%1/? [R=301,L]

Теперь сюда:...://test.loc/vtor//

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий