Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Редирект динамической страницы на преобразованную htaccess файлом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
zapatronen
Отправлено: 10 Августа, 2017 - 17:56:37
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Товарищи, обчитался уже статей и форумов, но нигде внятного не написано или я дырявый не вижу. Можно ли сделать редирект с динамически созданой страницы вида:

/product.php?article=EC141244&name=DC-Motor-3-6V

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

на страницу

/EC141244/DC-Motor-3-6V.html


Само преобразование работает. Это делается следующим кодом:

RewriteEngine On
#генерируем чпу ссылку для страницы товара
RewriteRule ^([^/]*)/([^/]*)\.html$ /product.php\?article=$1&name=$2 [L,R=301]



А вот редирект не получается, многие пишут что это невозможно, так ли это?

Логика же такая?:

1. Включаю мод реврайт
2. Затем преобразовываю ссылку
3. Затем думаю как сделать редирект с одной ссылки на другую преобразованную?

(Отредактировано автором: 10 Августа, 2017 - 17:57:51)

 
 Top
teleoperator27
Отправлено: 10 Августа, 2017 - 18:15:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteRule ^([^/]*)/([^/]*).html$ /product.php?article=$1&name=$2 [L]
 
My status
 Top
zapatronen
Отправлено: 10 Августа, 2017 - 18:37:38
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Флаг не помогате, редирект не происходит. Преобразованная ссылка открывается только когда я вручную ее ввожу, по сути есть дубль

Такая
/product.php?article=EC141244&name=DC-Motor-3-6V
и такая
/EC141244/DC-Motor-3-6V.html

Две ссылки рабочие, но редирект именно с одной на другую не получается
пробовал еще так:

RewriteCond %{QUERY_STRING} ^article=$1&name=2$

Но все равно ноль результата
 
 Top
Строитель Модератор
Отправлено: 10 Августа, 2017 - 18:54:57
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




zapatronen, вам именно в .htaccess нужен редирект? Или header('Location') тоже подойдёт?
(Добавление)
А, если это для ЧПУ, то header('Location') тут не подходит.
 
 Top
zapatronen
Отправлено: 10 Августа, 2017 - 19:01:47
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Это для чпу чтобы ключевики вставить в ссылку
 
 Top
teleoperator27
Отправлено: 10 Августа, 2017 - 19:25:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




zapatronen пишет:
но редирект именно с одной на другую не получается
А при чем тут редирект? и откуда возьмется дубль? Ссылок без ЧПУ просто не будет нигде на сайте, какой дубль?
 
My status
 Top
zapatronen
Отправлено: 10 Августа, 2017 - 19:32:29
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




[quote=teleoperator27][/quote]


Я так рассуждаю, что если к одинаковой странице ведут две ссылки, то это дубли

sub.easycraft_by/product.php?article=FZ0046&name=Proto-Shield

и после преобразования в .htaccess
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteRule ^([^/]*)/([^/]*)\.html$ /product.php\?article=$1&name=$2 [L]


появляется еще один путь к этому же товару

sub.easycraft_by/FZ0046/Proto-Sh ield.html

Две ссылки на один товар-дубль

а редирект для того чтобы с некрасивой ссылки редиректило на преобразованную

(Отредактировано автором: 10 Августа, 2017 - 19:36:11)

 
 Top
teleoperator27
Отправлено: 10 Августа, 2017 - 19:58:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




zapatronen пишет:



Я так рассуждаю, что если к одинаковой странице ведут две ссылки, то это дубли


Правильно рассуждаете. Только неправильно то, что вы не имеете ввиду такой момент: если на сайте не будет ссылки без ЧПУ, то о каких дублях будет идти речь? Если на сайте все страницы с чпу, то и ссылки все должны быть с чпу, а не так, кто в лес, кто по дрова. Так работают все движки. А вы в данный момент пытаетесь изобрести велосипед без колес. Не придумывайте проблему, а просто сделайте, что бы на сайте сслыки были одного вида, и этой проблемы просто не станет.
 
My status
 Top
zapatronen
Отправлено: 10 Августа, 2017 - 20:11:29
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




[quote=teleoperator27][/quote]

Не понимаю все равно о чем вы. Огорчение

Все ссылки в product.php и так преобразованы, а если я загоню сайт, который модифицирую вместо старой версии, то в выдаче будут ссылки не преобразованные и при клике пользователя на них будут вести на старые ссылки без чпу. Если я каким-то образом избавлюсь от старой ссылкы, то как я расскажу гугл, что ссылка теперь другая, кроме как редиректом
 
 Top
teleoperator27
Отправлено: 10 Августа, 2017 - 20:50:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




А, так у вас сейчас проиндексированы ссылки без ЧПУ? А вы хотите ЧПУ внедрить?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. RewriteRule ^(.*)product.php?article=([^/]*)&name=([^/]*)$ http://site.ru/$2/$3.html [R=301,L]

(Отредактировано автором: 10 Августа, 2017 - 20:57:46)

 
My status
 Top
zapatronen
Отправлено: 10 Августа, 2017 - 21:08:54
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




[quote=teleoperator27][/quote]

Да в индексте висят без ЧПУ, пример ваш не работает

RewriteEngine On
RewriteRule ^(.*)product.php?article=([^/]*)&name=([^/]*)$ http://sub.easycraft.by/$2/$3 [R=301,L]


тут точно так переменные объявлять?

/2$/3$ или /$2/$3 ?
(Добавление)
в общем я примерно понял, искать пример как редиректить со страницы на страницу и вместо get параметров использовать регулярные выражения, а в ссылке, которая должа показываться вставлять переменные

(Отредактировано автором: 10 Августа, 2017 - 21:10:18)

 
 Top
teleoperator27
Отправлено: 10 Августа, 2017 - 21:38:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




попробуйте убрать вначале ^(.*)

PHP:
скопировать код в буфер обмена
  1. RewriteRule ^product.php?article=([^/]*)&name=([^/]*)$ http://sub.easycraft.by/$1/$2 [R=301,L]

как то так.
Хотя я бы на php сделал. типа как-то

PHP:
скопировать код в буфер обмена
  1. if(проверяем, что урл без ЧПУ){
  2. header(“HTTP/1.1 301 Moved Permanently”);
  3. header(“Location: http://sub.easycraft.by/ и так далее";);
  4. exit();
  5. }

(Отредактировано автором: 10 Августа, 2017 - 21:39:01)

 
My status
 Top
zapatronen
Отправлено: 11 Августа, 2017 - 09:03:38
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




не работает конструкция, видать как и говорят в нете что с гет параметрами косяки какие-то
например такая конструкция
RewriteRule ^dost.php$ http://sub[dot]easycraft[dot]by/dostavka.php [R=301,L]

работает, все редиректит

а ссылка с регулярками не хочет цепляться, вообще никакой реакции даже ошибок не выдает, пойду курить мануалы, отпишу если докопаюсь до истины

RewriteRule ^(.*)product.php?article=([^/]*)&name=([^/]*)$ http://sub[dot]easycraft[dot]by/$1/$2 [R=301,L]
 
 Top
miketomlin
Отправлено: 11 Августа, 2017 - 10:07:15
Post Id


Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016  


Помог: 5 раз(а)




GET-параметры не в правиле пишутся, а в условии с QUERY_STRING.

Вообще ситуация известная. Если делать только при помощи .htaccess, нужно каким-то образом избавиться от зацикливания, т.к. в реализации должны присутствовать два конфликтующих друг с другом действия – рерайт и редирект. Обычно для этого используют условие с THE_REQUEST.

Либо часть работы возложить на скрипт, как выше советовали.
(Добавление)
Можно просто файл-обработчик переименовать в что-то вроде profuctslfurhfcdurexsopp.php – такой дубль вряд ли найдут, если вы сами его не засветите Улыбка
(Добавление)
Лучше всего конечно нативно обрабатывать ЧПУ в единой точке входа без использования обратной трансляции частей пути/всего пути в GET-параметры/GET-параметр, но это сложнее сделать.
 
 Top
zapatronen
Отправлено: 12 Августа, 2017 - 21:18:30
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




[quote=miketomlin][/quote]

Спасибо за подсказку на счет условия

Сделал так

CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteCond %{QUERY_STRING} article=([^/]*)&name=([^/]*)
  2. RewriteCond %{QUERY_STRING} !url_rewrited=1
  3. RewriteRule product.php /%1/%2.html? [R,L,NC]
  4.  
  5. RewriteRule ^([^/]*)/([^/]*)\.html$ /product.php\?article=$1&name=$2  [L,NC]


По клику на ссылку все меняется, но как вы говорили встречается зацикливание, продолжаю копать дальше, найду решение отрапартую. Попробую вникнуть во все что написали ниже
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB