jkm

Рейтинг
120
Регистрация
20.02.2014
netwind:
Как это вообще может быть связано ? загадка просто.

А разгадка проста :)

Там перед вычислением хеш суммы удаляются комментарии с помощью функции 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 нужно так


RewriteCond %{QUERY_STRING} hello_world
RewriteRule ^ http://www.site.ru/? [R=301,L]

Как-нибудь так


RewriteEngine On

RewriteRule ^(?:[^/]+/){2,}\d+-([^/]+)$ /$1? [R=301,L]

Ну, если редирект работает верно, но Magento показывает ошибку, то даже если сначала вырезаем из URL символы ?_, а потом уже обрезаем всё лишнее (начиная с openstat).

В итоге после перехода на верный адрес Magento точно также покажет ошибку.

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


http://sitename.ru/product_name1.html

А чем не устраивал предложенный вариант.

Если нужен редирект на адрес с символом подчеркивания в конце http://sitename.ru/product_name1.html_, то нужно исправить /$1? на /$1_?


RewriteCond %{QUERY_STRING} ^_openstat
RewriteRule ^(.*)$ /$1_? [R=301,L]
Pekkonen:

Может быть всё таки получится модернизировать это:
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}

Pekkonen:
Предложенный вами вариант срабатывает на другом сайте, но на этом ему что-то мешает, и в результате получаю неправильный адрес :(

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

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

Ставьте редирект в самом верху сразу после RewriteEngine On


RewriteCond %{QUERY_STRING} ^_openstat
RewriteRule ^(.*)$ /$1? [R=301,L]


---------- Добавлено 19.02.2016 в 14:05 ----------

В RewriteRule попадает не вся ссылка, а только путь к файлу. Аргументы переносятся в %{QUERY_STRING}


RewriteEngine On
RewriteRule ^([-a-z0-9]+\.html). /$1 [R=301,L]

RewriteCond %{QUERY_STRING} .
RewriteRule ^([-a-z0-9]+\.html) /$1? [R=301,L]

Или так


RewriteEngine On

RewriteCond %{THE_REQUEST} "^\S+ /([-a-z0-9]+\.html)[/?]"
RewriteRule ^ /%1? [R=301,L]

Если ставить в самый конец после всех правил например после RewriteRule .* index.php [L], то работать не будет. Ставь первым правилом.


RewriteEngine On
RewriteRule ^([-a-z0-9]+\.html)/[-a-z0-9/]+\.html$ /$1 [R=301,L]
Gunesh:
Вопрос такой: как составить регулярку, чтобы с site.ru/raskraskа.html/knizhka/albom/tetrad.html перенаправлял на site.ru/raskraskа.html

попробовал так:
RewriteEngine on
RewriteRule ^/([a-z-0-9])+\.html/[a-z-0-9]+$ /$1.html
не срабатывает

^/ - то с чем работает RewriteRule не начинается с "/".

[a-z-0-9]+$ - в символьный класс нужно включить / и после добавить \.html.


RewriteRule ^([-a-z0-9]+\.html)/[-a-z0-9/]+\.html$ /$1

В таком виде это внутренее перенаправление. Для внешнего перенаправления добавить [R=301,L] и тогда будет 301 редирект.

Всего: 749