Вопрос по редиректу

12 3
MASTAKILLA
На сайте с 11.05.2006
Offline
160
1195

Через редирект закрыл ссылки на внешние сайты..

в robots.txt

disallow: go.php

go.php

<?if( array_key_exists('to', $_GET))

{

$redirect = $_GET['to'];

header("HTTP/1.1: 301 Moved Permanentlyn");

header("Location: " . $redirect);

}

else

{

header("HTTP/1.1: 404 Not Foundn");

print "Страницы не существует";

}?>

Так вот в apache все ок работало, сейчас переехали на новый хостинг и php-fpm, так при редиректе ссылки режутся..

Если к примеру ссылка на http://site.ru/forum/viewtopic.php?f=11&t=103293

она обрезается до: http://site.ru/forum/viewtopic.php?f=11

Как быть?

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

Потому что спецсимволы в аргументах по хорошему надо енкодить. Тогда ничего резаться не будет

/go.php?to=urlencode('http://site.ru/forum/viewtopic.php?f=11&t=103293');

$redirect = urldecode($_GET['to']);

[umka]
На сайте с 25.05.2008
Offline
456
#2

Немного не по теме, но обратите внимание на 3-й параметр:

http://php.net/manual/ru/function.header.php

Лог в помощь!
MASTAKILLA
На сайте с 11.05.2006
Offline
160
#3

Почему на одном хостинге работало, на другом перестало? Может в настройках php.ini какая беда?

IL
На сайте с 20.04.2007
Offline
435
#4

Можно из $_SERVER['REQUEST_URI'] выдернуть всё после to=

и использовать для редиректа вместо

$redirect = $_GET['to'];
MASTAKILLA:
Почему на одном хостинге работало, на другом перестало? Может в настройках php.ini какая беда?

Вам шашечки или ехать?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Z
На сайте с 17.09.2010
Offline
34
#5
siv1987:
$redirect = urldecode($_GET['to']);

Из мануала:

Переменные в суперглобальных массивах $_GET и $_REQUEST уже декодированны. Применение urldecode() к элементам $_GET или $_REQUEST может привести к непредсказуемым и опасным результатам.

MASTAKILLA
На сайте с 11.05.2006
Offline
160
#6

Заменил go.php на этот код:

<?php

if (isset($_SERVER['QUERY_STRING'])) Header('Location: '.$_SERVER['QUERY_STRING']);

?>

Все заработало.

siv1987
На сайте с 02.04.2009
Offline
427
#7
zerocube:
Из мануала:
Переменные в суперглобальных массивах $_GET и $_REQUEST уже декодированны.

Да, так оно и есть.

niko_viktor
На сайте с 11.06.2009
Offline
41
#8

Привет всем, чтобы не создавать новую тему решил поискать помощи здесь...

Кто может помочь с файлом .htaccess?

Дело вот какое: кто-то проставил на сайт много внешних ссылок типа:

адрес_сайта/страница.html?post=098384

Из-за этого поисковые системы (в частности Гугл) индексирует дубли страниц, которых по сути-то и нету на сервере.

Я уже замучился писать на каждое выражение правило в robots.txt для запрета индексации.

Как сделать, чтобы любые символы после .html игнорировались и выдавалась правильная страница, заканчивающаяся просто на .html

Заранее благодарен.

KNEP.ru (https://knep.ru/) - мой блог Кнеп.ру
siv1987
На сайте с 02.04.2009
Offline
427
#9
niko_viktor:
Я уже замучился писать на каждое выражение правило в robots.txt для запрета индексации.

Зачем каждое когда здесь можно создать одно правило для всех выражений? ВЫ же сами видите что часть урла остается статическим, и легко определяет ваши урлы, не запрещая ничего лишнего.

niko_viktor
На сайте с 11.06.2009
Offline
41
#10

В панеле вебмастера Гугла я смотрю дубли страниц. Вижу например ситуацию описанную выше и добавляю правило в robots.txt

Но хочется сделать по-хорошему. Чтобы пользователя (либо ПС) переадресовывало 301 редиректом на правильную страницу.

Я пытался так:

RewriteBase /

RewriteRule ^(.*)\.htm$ $1.html [R=permanent]

Но не работает. Синтаксис естественно порчу т.к. не могу его понять. Уже больше месяца мучаюсь. Пробую и так и эдак. Даже уже пытался кинуть эту затею... Но как увижу в очередной раз, что в Гугле снова множество дублей, аж плохо... Откуда он только берет эти не правильные адреса?..

---------- Добавлено 16.07.2013 в 21:55 ----------

Пробовал такие варианты:

RewriteRule ^([a-z^\.]+).html(\?.*)?$ ^(.*).html$1 [QSA]

RewriteRule ^([a-z^\.]+).html(\?.*)?$ .html$1 [QSA]

Не помогает. Всё равно отображает содержимое страницы .html а в адресной строке все последующие параметры...

12 3

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