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
Форумы портала PHP.SU :: Версия для печати :: Редирект динамической страницы на преобразованную htaccess файлом
Форумы портала PHP.SU » » Вопросы новичков » Редирект динамической страницы на преобразованную htaccess файлом

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

1. zapatronen - 10 Августа, 2017 - 17:56:37 - перейти к сообщению
Товарищи, обчитался уже статей и форумов, но нигде внятного не написано или я дырявый не вижу. Можно ли сделать редирект с динамически созданой страницы вида:

/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. Затем думаю как сделать редирект с одной ссылки на другую преобразованную?
2. teleoperator27 - 10 Августа, 2017 - 18:15:47 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteRule ^([^/]*)/([^/]*).html$ /product.php?article=$1&name=$2 [L]
3. zapatronen - 10 Августа, 2017 - 18:37:38 - перейти к сообщению
Флаг не помогате, редирект не происходит. Преобразованная ссылка открывается только когда я вручную ее ввожу, по сути есть дубль

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

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

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

Но все равно ноль результата
4. Строитель - 10 Августа, 2017 - 18:54:57 - перейти к сообщению
zapatronen, вам именно в .htaccess нужен редирект? Или header('Location') тоже подойдёт?
(Добавление)
А, если это для ЧПУ, то header('Location') тут не подходит.
5. zapatronen - 10 Августа, 2017 - 19:01:47 - перейти к сообщению
Это для чпу чтобы ключевики вставить в ссылку
6. teleoperator27 - 10 Августа, 2017 - 19:25:39 - перейти к сообщению
zapatronen пишет:
но редирект именно с одной на другую не получается
А при чем тут редирект? и откуда возьмется дубль? Ссылок без ЧПУ просто не будет нигде на сайте, какой дубль?
7. zapatronen - 10 Августа, 2017 - 19:32:29 - перейти к сообщению
[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

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

а редирект для того чтобы с некрасивой ссылки редиректило на преобразованную
8. teleoperator27 - 10 Августа, 2017 - 19:58:46 - перейти к сообщению
zapatronen пишет:



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


Правильно рассуждаете. Только неправильно то, что вы не имеете ввиду такой момент: если на сайте не будет ссылки без ЧПУ, то о каких дублях будет идти речь? Если на сайте все страницы с чпу, то и ссылки все должны быть с чпу, а не так, кто в лес, кто по дрова. Так работают все движки. А вы в данный момент пытаетесь изобрести велосипед без колес. Не придумывайте проблему, а просто сделайте, что бы на сайте сслыки были одного вида, и этой проблемы просто не станет.
9. zapatronen - 10 Августа, 2017 - 20:11:29 - перейти к сообщению
[quote=teleoperator27][/quote]

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

Все ссылки в product.php и так преобразованы, а если я загоню сайт, который модифицирую вместо старой версии, то в выдаче будут ссылки не преобразованные и при клике пользователя на них будут вести на старые ссылки без чпу. Если я каким-то образом избавлюсь от старой ссылкы, то как я расскажу гугл, что ссылка теперь другая, кроме как редиректом
10. teleoperator27 - 10 Августа, 2017 - 20:50:04 - перейти к сообщению
А, так у вас сейчас проиндексированы ссылки без ЧПУ? А вы хотите ЧПУ внедрить?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. RewriteRule ^(.*)product.php?article=([^/]*)&name=([^/]*)$ http://site.ru/$2/$3.html [R=301,L]
11. zapatronen - 10 Августа, 2017 - 21:08:54 - перейти к сообщению
[quote=teleoperator27][/quote]

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

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


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

/2$/3$ или /$2/$3 ?
(Добавление)
в общем я примерно понял, искать пример как редиректить со страницы на страницу и вместо get параметров использовать регулярные выражения, а в ссылке, которая должа показываться вставлять переменные
12. teleoperator27 - 10 Августа, 2017 - 21:38:41 - перейти к сообщению
попробуйте убрать вначале ^(.*)

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. }
13. zapatronen - 11 Августа, 2017 - 09:03:38 - перейти к сообщению
не работает конструкция, видать как и говорят в нете что с гет параметрами косяки какие-то
например такая конструкция
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]
14. miketomlin - 11 Августа, 2017 - 10:07:15 - перейти к сообщению
GET-параметры не в правиле пишутся, а в условии с QUERY_STRING.

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

Либо часть работы возложить на скрипт, как выше советовали.
(Добавление)
Можно просто файл-обработчик переименовать в что-то вроде profuctslfurhfcdurexsopp.php – такой дубль вряд ли найдут, если вы сами его не засветите Улыбка
(Добавление)
Лучше всего конечно нативно обрабатывать ЧПУ в единой точке входа без использования обратной трансляции частей пути/всего пути в GET-параметры/GET-параметр, но это сложнее сделать.
15. zapatronen - 12 Августа, 2017 - 21:18:30 - перейти к сообщению
[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]


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

 

Powered by ExBB FM 1.0 RC1