[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: htaccess правила
Страницы: 1, 2
ZVER
Добрый день. у меня такая проблемка, в 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. Спасибо
OleKh
Цитата (ZVER @ 28.02.2013 - 12:19)
[-a-zA-Zа-яА-Ятрысуц_]+)

буквы "трысуц" уже есть в "а-Я", поэтому дублировать их нет необходимости
вот эта конструкция смущает ^ru, может так ^.*ru
отсутствует [L] или другой флаг
вот этот флаг может поможет - [QSA], только поискать в интернете как правильно использовать
ZVER
я же пояснил, что было без этих, букв,я и так понимаю что а-я эо диапазон от а до я
вообще стоял сначала ключ L но я где-то вычитал что этот ключ какбы завершение инструкций, т.е. если в строке встретился этот L тогда следующую строку уже не нужно читать
а QSA эточтобы прочитывать все строки, или я что-то не так понял?
ZVER
при вот таком варианте
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=Комплектующие непонятно

Помогите, плиииииииииииз
Visman
Длинные правила (они более строгие) поставь раньше коротких.
З.Ы. И как выше говорили, "трысуц" лишние. Для полноты там должны не они стоять, а "Ёё".
killer8080
ZVER
зачем такие сложности? Направляй все запросы в index.php, а REQUEST_URI разбирай уже в скрипте.
ZVER
Цитата (killer8080 @ 2.03.2013 - 11:58)
ZVER
зачем такие сложности? Направляй все запросы в index.php, а REQUEST_URI разбирай уже в скрипте.

Спасибо, я как раз сегодня утром дошёл до этой идеи, только есть проблема
REQUEST_URI вместо кириллицы выводит что-то типа %D0%9B и т.д. и т.п. =)
Что делать? Это же нечитабельные данные
ZVER
killer8080, спасибо. это конечно решение проблемы. но всё-же, неужели нет более цивилизованного способа решения проблемы?
killer8080
Цитата (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
ZVER
Я тут подумал, а может я в 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

на сколько это правильно?
ZVER
killer8080
опять проблемка, я выше уже говорил что почему-то срабатывает бесконечная переадресация, с Вашим вариантом такая же ситуация
т.е. когда я по логике должен попасть на страницу
site/ru/select я попадаю на адрес site/ru/ru/ru/ru/ru/ru/ru/ru/ru/select
и браузер матерится что на странице бесконечная переадресация
это скорее всего из-за того что в начале кода стоит
if (empty($_GET['site']))
{header:'Location:/ru/select';}
killer8080
Цитата (ZVER @ 2.03.2013 - 18:11)
это скорее всего из-за того что в начале кода стоит
if (empty($_GET['site']))
{header:'Location:/ru/select';}

ну так убери его user posted image
ZVER
А как без него? просто логика так построена, что если $_GET['site'] пусто. тогда нужно открыть специальную страницу site/ru/select на которой пользователь выбирает в какой раздел сайта он хочет попасть.
ZVER
у меня появляется желание послать это ЧПУ куда по-дальше, без него всё работало идеально, а теперь я даже и не вспомню как должны выглядить ссылки на страницы, чтобы попадать куда нужно =(
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.