Добрый день. у меня такая проблемка, в htaccess лежат 4 правила для rewrite
RewriteEngine on
RewriteRule ^ru/([-a-zA-Zа-яА-Ятрысуц_]+)/([-a-zA-Zа-яА-Ятрысуц_]+) index.php?lang=ru&site=$1&page=$2 [L]
RewriteRule ^en/([-a-zA-Zа-яА-Ятрысуц_]+)/([-a-zA-Zа-яА-Ятрысуц_]+) index.php?lang=en$site=$1&page=$2 [L]
При этих правилах. работают только страницы, в которых передаются 3 GET переменных
а при
RewriteEngine on
RewriteRule ^ru/([-a-zA-Zа-яА-Ятрысуц_]+) index.php?lang=ru&site=$1
RewriteRule ^en/([-a-zA-Zа-яА-Ятрысуц_]+) index.php?lang=en&site=$1
открываются только страницы. у которых 2 GET переменные
Вместе все 4 правила почему-то не работают, выдают 500 ошибку
И ещё, в правилах после большой буквы Я добавлено ещё несколько маленьких букв, это не просто так, эти буквы я добавлял по мере того как они встречались и создавали проблему, т.е. началось всё с буквы т, в словае Комплектующие вместо буквы т стоял ромбик с вопросом, а после ромбика ничего не выводилось.
Подскажите как сделать чтобы работали одновременно все правила и для коротких и для длинных url. Спасибо
Цитата (ZVER @ 28.02.2013 - 12:19) |
[-a-zA-Zа-яА-Ятрысуц_]+) |
буквы "трысуц" уже есть в "а-Я", поэтому дублировать их нет необходимости
вот эта конструкция смущает ^ru, может так ^.*ru
отсутствует [L] или другой флаг
вот этот флаг может поможет - [QSA], только поискать в интернете как правильно использовать
я же пояснил, что было без этих, букв,я и так понимаю что а-я эо диапазон от а до я
вообще стоял сначала ключ L но я где-то вычитал что этот ключ какбы завершение инструкций, т.е. если в строке встретился этот L тогда следующую строку уже не нужно читать
а QSA эточтобы прочитывать все строки, или я что-то не так понял?
при вот таком варианте
RewriteEngine on
RewriteRule ^ru/([-a-zA-Zа-яА-Я_]+) index.php?lang=ru&site=$1
RewriteRule ^ru/([-a-zA-Zа-яА-Я_]+)/([-a-zA-Zа-яА-Ятрысуц_]+) index.php?lang=ru&site=$1&page=$2
RewriteRule ^en/([-a-zA-Zа-яА-Я_]+) index.php?lang=en&site=$1
RewriteRule ^en/([-a-zA-Zа-яА-Я_]+)/([-a-zA-Zа-яА-Ятрысуц_]+) index.php?lang=en$site=$1&page=$2
Всё работает как надо, единственная проблема в том что я не могу отловить текущую страницу $_GET['page'] почему-то пустая, хотя на самом деле значение в ней есть, т.е. я нахожусь на странице site/ru/Video/Комплектующие а print_r($_GET) радостно сообщает что в гет есть lang=ru и site=Video куда теряется page=Комплектующие непонятно
Помогите, плиииииииииииз
Длинные правила (они более строгие) поставь раньше коротких.
З.Ы. И как выше говорили, "трысуц" лишние. Для полноты там должны не они стоять, а "Ёё".
killer8080
2.03.2013 - 11:58
ZVER
зачем такие сложности? Направляй все запросы в index.php, а REQUEST_URI разбирай уже в скрипте.
Цитата (killer8080 @ 2.03.2013 - 11:58) |
ZVER зачем такие сложности? Направляй все запросы в index.php, а REQUEST_URI разбирай уже в скрипте. |
Спасибо, я как раз сегодня утром дошёл до этой идеи, только есть проблема
REQUEST_URI вместо кириллицы выводит что-то типа %D0%9B и т.д. и т.п. =)
Что делать? Это же нечитабельные данные
killer8080
2.03.2013 - 19:20
killer8080, спасибо. это конечно решение проблемы. но всё-же, неужели нет более цивилизованного способа решения проблемы?
killer8080
2.03.2013 - 19:42
Цитата (ZVER @ 2.03.2013 - 17:31) |
неужели нет более цивилизованного способа решения проблемы? |
Есть, передавай реквест через гет
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]
тогда он будет декодироваться автоматически, а заодно откинет от него query string
Я тут подумал, а может я в
php что-то не так написал? Просто раньше, до идеи с ЧПУ было вот так
?lang=$_GET['lang']&site=$_GET['site']&page=$_GET['page']
ну т.е. если нужно поменять язык то
?lang=ru&site=$_GET['site']&page=$_GET['page']
а если страницу то
?lang=$_GET['lang']&site=$_GET['site']&page=Комплектующие
и т.д.
а теперь ссылки выглядят вот так
например если я хочу просто поменять страницу оставаясь в том же site и при том же lang то ссылка будет просто
'/' . $page
на сколько это правильно?
killer8080
опять проблемка, я выше уже говорил что почему-то срабатывает бесконечная переадресация, с Вашим вариантом такая же ситуация
т.е. когда я по логике должен попасть на страницу
site/ru/select я попадаю на адрес site/ru/ru/ru/ru/ru/ru/ru/ru/ru/select
и браузер матерится что на странице бесконечная переадресация
это скорее всего из-за того что в начале кода стоит
if (empty($_GET['site']))
{header:'Location:/ru/select';}
killer8080
2.03.2013 - 20:12
Цитата (ZVER @ 2.03.2013 - 18:11) |
это скорее всего из-за того что в начале кода стоит if (empty($_GET['site'])) {header:'Location:/ru/select';} |
ну так убери его
А как без него? просто логика так построена, что если $_GET['site'] пусто. тогда нужно открыть специальную страницу site/ru/select на которой пользователь выбирает в какой раздел сайта он хочет попасть.
у меня появляется желание послать это ЧПУ куда по-дальше, без него всё работало идеально, а теперь я даже и не вспомню как должны выглядить ссылки на страницы, чтобы попадать куда нужно =(
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.