netwind: Как это вообще может быть связано ? загадка просто.
А разгадка проста :)
Там перед вычислением хеш суммы удаляются комментарии с помощью функции php_strip_whitespace. Результат её работы зависит от настроек php. Очевидно AI-WHITELIST.db генерился с включенной short_open_tag=on
Ну, если редирект работает верно, но Magento показывает ошибку, то даже если сначала вырезаем из URL символы ?_, а потом уже обрезаем всё лишнее (начиная с openstat).
В итоге после перехода на верный адрес Magento точно также покажет ошибку.
Сначала нужно разобраться, почему происходит ошибка, если отрывать страницу
"в лоб" заменить не получится. вариант с использованием preg_replace_callback
Да ладно :)
https://regex101.com/r/gD1sF8/1
Как это вообще может быть связано ? загадка просто.
А разгадка проста :)
Там перед вычислением хеш суммы удаляются комментарии с помощью функции php_strip_whitespace. Результат её работы зависит от настроек php. Очевидно AI-WHITELIST.db генерился с включенной short_open_tag=on
В RewriteRule попадает не вся ссылка, а только путь к файлу, так что GET параметры следует искать в %{QUERY_STRING}.
Для ссылок site.ru/?hello_world-122-2-3-3-rw34-r3 нужно так
Как-нибудь так
Ну, если редирект работает верно, но Magento показывает ошибку, то даже если сначала вырезаем из URL символы ?_, а потом уже обрезаем всё лишнее (начиная с openstat).
В итоге после перехода на верный адрес Magento точно также покажет ошибку.
Сначала нужно разобраться, почему происходит ошибка, если отрывать страницу
А чем не устраивал предложенный вариант.
Если нужен редирект на адрес с символом подчеркивания в конце http://sitename.ru/product_name1.html_, то нужно исправить /$1? на /$1_?
Может быть всё таки получится модернизировать это:
RewriteRule (.+?)\.openstat.+ http://%{HTTP_HOST}/1 [L,R=301]RedirectMatch permanent (.+?)\openstat.+$ http://sitename.ru$1
Нет, не получится.
Redirect и RedirectMatch это директивы mod_alias. Всё что после знака вопроса не участвует в сравнении с шаблоном.
У этого модуля нет возможности проверять, что же там было после знака вопроса.
Такая возможность есть у mod_rewrite. Но это делается не через RewriteRule, а конструкциями
RewriteCond %{QUERY_STRING}
или
RewriteCond %{THE_REQUEST}
Предложенный вами вариант срабатывает на другом сайте, но на этом ему что-то мешает, и в результате получаю неправильный адрес :(
Порядок расположения правил имеет значение. Результат работы правил влияет на последующие правила.
Поэтому редиректы должны срабатывать до того как другие правила что-нибудь поменяют.
Ставьте редирект в самом верху сразу после RewriteEngine On
---------- Добавлено 19.02.2016 в 14:05 ----------
В RewriteRule попадает не вся ссылка, а только путь к файлу. Аргументы переносятся в %{QUERY_STRING}
Или так
Если ставить в самый конец после всех правил например после RewriteRule .* index.php [L], то работать не будет. Ставь первым правилом.