Добрый день форумчане. Можете пожалуйста помочь с написанием(регулярного выражения) участвующие в редиректе. У меня есть самописный сайт http://example.com/ (он мультиязычный (2 языка)). Столкнулся с такой проблемой: Мне необходимо сделать постоянный(301) редирект с таких страниц на такие: Код (Text): http://www.example.com ---> http://example.com/index.php?lang=EN (по умолчанию) http://www.example.com/ ---> http://example.com/index.php?lang=EN (по умолчанию) http://example.com ---> http://example.com/index.php?lang=EN (по умолчанию) http://example.com/ ---> http://example.com/index.php?lang=EN (по умолчанию) http://example.com/?lang=EN ---> http://example.com/index.php?lang=EN http://www.example.com/?lang=EN ---> http://example.com/index.php?lang=EN //(EN - здесь может быть и RU и UA и др.) Хотелось бы это провернуть в httacess. Знаю, можно просто достать всё необходимое(ссылку) из суперглобального массива $_SERVER, распарсить её, проверить и делать редирект через header, но считаю правильным сделать через htaccess. Я вроде понимаю базово регулярки, но черт никогда с ними не практиковал. ps: Хотел добавить в раздел SEO тему, но не нашел.
похерил ссылки ибо нефиг. ты либо не правильно хочешь, либо это и без рерайтера решается. первые две строки - отличаются трейлинг-слэшем между собой и субдоменом тридаблъю между парой три-четыре. это решается стандартными средствами апачи БЕЗ рерайтера. в мануале по рерайтеру есть отдельная статья на эту тему. следующие две строчи - третья-четвертая. их веб-серверу будет резолвить в корневой каталог и далее искать индекс этого каталога. если это будет индекс-пхп то туда запрос и свалится. а далее внутри ты проверяешь установлена ли явно переменная языка (ключ ланг суперглобмассива гет) и ставишь её при необходимости в енг. пятая-шестая. появился явный ключ языка. шестая строка как первая-вторая уходит. пятая строка тоже не редирект потому что как третья-четвертая резолв и так уйдет к индексу.
Я лично не против, главное как образец был. Я хочу явно отдать ответ (заголовок 301) при переходе по этим ссылка. Хм... на сервере нету доступа к php.ini (хотя вроде можно менять некие конфигурации через htaccess). Но статью Я поищу.
понял тебя. Код (Text): RewriteEngine On RewriteBase / RewriteCond "%{QUERY_STRING}" !(^|&)lang=..(&|$) RewriteRule .* index.php?lang=en [R=301,L] RewriteCond "%{QUERY_STRING}" (^|&)lang=(..)(&|$) RewriteCond "%2" !^(en|ru|ua)$ RewriteRule .* index.php?lang=en [R=301,L] Первая пара строк включает рерайтер и задает базовый обслуживаемый урл. Вторая пара строк проверяет наличие ланга в аргументах и если его нет - редиректит на индекс с лангом. Третья пара чисто поржать - если не английский-русский-украинский, то редирект на индекс с английским лангом. Тут не рассматривается аппенд оригинальной строки запроса ибо там могут быть нюансы. Тут не рассматривается редирект с поддоменов потому что ты должен его делать другими средствами, не нерайтером. Ну и тут не рассматриваются варианты, при которых ты не используешь единую точку входа. а пхп-ини тут при чем? Я про конфигурацию веб-сервера говорил. Апачи настраивается не через пхп-ини. её никто не прятал. Она в документации по веб-серверу в целом и разделе рерайтера в частности. Тему уношу в настройки веб-сервера, так как верховное божество рерайта (эт я, приятно познакомиться! Санитары рядом?) решает подобные вопросы там.
Мягко говоря ты написал полную хрень. Давай поясню. вот тут ты сравниваешь хост со значением www.example.ru, потом со значением www.example.ru/ - ТРЕЙЛИНГ СЛЭША НЕ МОЖЕТ БЫТЬ В ДОМЕННОМ ИМЕНИ -, потом с example.ru и example.ru/ - тут опять слэш вылез. И делаешь с этого всего редирект на индекс с указанием языка. Следуя логике вообще любого адекватного существа в этой вселенной - ты создал бесконечный редирект. Запрос пришел на ввв-чо-то-там? Да! Первое правило! Редирект с лангом. Ок. Запрос пришел на чо-то-там-без-ввв? ДА! ТРЕТЬЕ ПРАВИЛО. Редирект на без-ввв с лангом. Ок. Запрос пришел на чо-то-там-без-ввв? ДА! ТРЕТЬЕ ПРАВИЛО. И так далее. Тут ты опять сравниваешь хост с недопустимыми значениями. Ну не может быть в хосте ни слэша, ни вопроса. Ну да хрен с ним. Допустим в каком-то мифическом мире у хоста будут эти значения и только ради того чтоб мы могли почитать какие же проверки ты сюда нафаршировал. И первая и вторая строчки оканчиваются так: заканчивается двумя заглавными буквами даблъю в любом регистре. Как ты собрался EN с этим сравнивать? EN никогда в жизни не будет равно WW. Третья строка - (ого!) исключаешь обращения к робот-ресурсам. Нот бэд. Четвёртая строка: совершить редирект с ресурса имя которого содержит две заглавные даблъю на вообще не важно куда. Тут главное именно откуда. Вот. Лайкай --- Добавлено --- Автор попросил убрать его полную хрень, потому что не обновлял страницы и не видел решения. Его хрень я покорно удаляю, однако оставляю свой линч на его хрень. Не зря ж я клавиатуру насиловал в конце концов