htaccess для смешанных кириллическо-латинских урлов

F1
На сайте с 24.01.2012
Offline
64
434

Доброго времени суток, друзья.

Моя проблема с редиректами урлов со смешанными урлами, содержащими и латиницу и кириллицу, а бонусом еще и кучу дефисов и .html на конце.

Пример адреса:

https://site.ru/доставка-горячей--еды---недорого.html

Я хочу чтобы он редиректил 301 на https://site.ru/shop/

Если просто скопировать адрес указанный ваше и вставить в notepad то получится абракадабра примерно такого вида: https://site.ru/%d0%b4%d0%be%d1%81%d1%82%d0%b0%d0%b2%d0%ba%d0%b0-%d0%b5%d0%b4%d1%8b---%d0%b2-%d1%81%d0%b2%d0%be%d0%b5%d0%b9-%d1%82%d0%b0%d1%80%d0%b5%d0%bb%d0%ba%d0%b5-%d0%b3.%d1%81%d0%b0%d1%80%d0%b0%d0%bf%d1%83%d0%bb.html Адрес выдуманный и нерабочий, просто чтобы передать смысл.

Что с ней делать дальше не знаю, пробовал писать правила для htaccess с этой белибердой - всё без толку, сайт не падает, но и правило не работает.

Написал в поддержку бегета, они написали что-то про: "Такие URL нужно указывать в формате percent-encoding, потому что Apache их получает именно в таком виде и работает уже с ними.". Легче от этого не стало, я мягко говоря не особо технарь, поэтому это как китайский для меня.

Подскажите пожалуйста, если кто сталкивался с такой проблемой, как можно сделать корректное правило переадресации для подобных урлов?

LEOnidUKG
На сайте с 25.11.2006
Offline
1739
#1

делайте через index.php и PHP код. Не мучайте этим всем htaccess

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
F1
На сайте с 24.01.2012
Offline
64
#2
LEOnidUKG:
делайте через index.php и PHP код. Не мучайте этим всем htaccess

Спасибо за предложение, но для меня что php код, что htaccess одинаково не просто. И так и так мучиться.

LEOnidUKG
На сайте с 25.11.2006
Offline
1739
#3
fackest1:
Спасибо за предложение, но для меня что php код, что htaccess одинаково не просто. И так и так мучиться.

В PHP можно преобразовать урл в нужный вид и уже сравнивать.

M
На сайте с 04.12.2013
Offline
223
#4
fackest1:
то получится абракадабра примерно такого вида

Это не абракадабра, а как раз-таки реальный кириллический адрес. Если используемый вами софт не делает предварительную автотрансляцию из URL-кодировки, то при редиректах нужно использовать именно такие адреса в качестве исходных.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
F1
На сайте с 24.01.2012
Offline
64
#5
miketomlin:
...то при редиректах нужно использовать именно такие адреса в качестве исходных.

Т.е. получается что с этой абракадаброй из notepad и нужно правило писать?

Я писал правило вида:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^/%d0%b4%d0%be%d1%81%d1%82%d0%b0%d0%b2%d0%ba%d0%b0-%d0%b5%d0%b4%d1%8b---%d0%b2-%d1%81%d0%b2%d0%be%d0%b5%d0%b9-%d1%82%d0%b0%d1%80%d0%b5%d0%bb%d0%ba%d0%b5-%d0%b3.%d1%81%d0%b0%d1%80%d0%b0%d0%bf%d1%83%d0%bb.html
RewriteRule ^/?$ shop/? [R=301,L]
</IfModule>

Вставил его в самое начало htaccess и оно не работает.

Я так понял, что эту абракадабру надо еще во что-то декодировать... или нет? Я запутался уже.

Допускаю, что в правиле где-то ошибку допустить мог.

M
На сайте с 04.12.2013
Offline
223
#6

Apache, или непосредственно mod_rewrite – не помню точно, делает упомянутую трансляцию в UTF-8. А вот PHP, например, делает только для части адреса, получаемой из $_GET (т.е. для GET-параметров), поэтому в скрипте путь из адреса доступен в исходной кодировке.

---------- Добавлено 03.04.2020 в 17:00 ----------

А вообще нафига вы сюда %{QUERY_STRING} приплели? То, что вы показывали в стартовом посте, – это путь.

---------- Добавлено 03.04.2020 в 17:02 ----------

Т.е. прямо в маску правила пихайте в UTF-кодировке и (если это .htaccess) без вед. слеша.

---------- Добавлено 03.04.2020 в 17:06 ----------

RewriteRule ^доставка-горячей--еды---недорого\.html$ ...
F1
На сайте с 24.01.2012
Offline
64
#7
А вообще нафига вы сюда %{QUERY_STRING} приплели? То, что вы показывали в стартовом посте, – это путь.

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

Т.е. прямо в маску правила пихайте в UTF-кодировке и (если это .htaccess) без вед. слеша.

так я точно не пробовал, чую положу сайт.

RewriteRule ^доставка-горячей--еды---недорого\.html$ ...

я вообще в самых простых ситуациях пользовал сервис https://www.rapidtables.com/web/tools/redirect-generator.html

Вставлял старый урл, новый урл, сгенерить правило, вставлял в htaccess и все работало. Но не в этот раз, тут тоже пробовал так же делать, но то что он генерит, почему-то не работает.

M
На сайте с 04.12.2013
Offline
223
#8

Так мой вариант сработал? Спрашиваю, т.к. чую, что в бегете вам соврали. Хочу в очередной раз убедиться, что у них там сидят ламеры :)

---------- Добавлено 03.04.2020 в 18:26 ----------

fackest1:
так я точно не пробовал, чую положу сайт.
Не боитесь использовать всякую фигню с левых сервисов, но боитесь проверить то, что я вам советую? Ну, ОК. ЧЁ тогда спрашивали? :)

---------- Добавлено 03.04.2020 в 18:27 ----------

Чтобы не трястись каждый раз по мелочам, обращайтесь к спецам, а не собирайте советы по форумам ;)
F1
На сайте с 24.01.2012
Offline
64
#9

miketomlin, Спасибо большое за советы.

Но я ничего не понял.

Проще заплатить спецу как вы и сказали.

Успехов всем.

S
На сайте с 30.09.2016
Offline
469
#10
fackest1:
так я точно не пробовал, чую положу сайт.

Вернёшь файл взад, и отляжет.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.

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