Хэлп по регулярке .htaccess

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Страничка: site.ru/infa.php?mod=pers&login=$login , где $login - параметр в ГЕТ (логин пользователя)
прописал в .htaccess:
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/ info.php?mod=pers&login=$1 [L,QSA]
теперь страничка пользователя доступна по адресу: site.ru/$login/
Что прописать, если в ГЕТ - параметре появилась пременная типа: roomN, где N - число?
Сделал вот так:
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/room([0-9])/ info.php?mod=pers&login=$1&room=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9_]+)/ info.php?mod=pers&login=$1 [L,QSA]
Работает. Но не так как надо.. Работает только вот так:
site.ru/login/room5/
а надо что бы и так срабатывало:
site.ru/login/ещё_переменные/room5/
----------------------
Иными словами: Если есть в строке адреса roomN, неважно в каком месте, то вылезало мое окошко с вводом текста.
-------------------------------------------
Вариант в пхп, страничка info.php:
Код:
if($_GET['mod']=='pers' && $_GET['login']){
if($_GET['room']){
//Выводим всплывающее окошко, которое можно закрыть
}
//Дальше выводим информацию о пользователе
}
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$2 [L,QSA]

RewriteRule ^([a-zA-Z0-9_]+)/(.*)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$3&other_params=$2 [L,QSA]

RewriteRule ^([a-zA-Z0-9_]+)/ info.php?mod=pers&login=$1 [L,QSA]
а если так попробовать?


update:
Кстати, если мне не изменяет память, то /room([0-9])/ при, например, /room10/ или /room100500/ не отработает. Нужно писать /room([0-9]+)/.
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$2 [L,QSA]

RewriteRule ^([a-zA-Z0-9_]+)/(.*)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$3&other_params=$2 [L,QSA]

RewriteRule ^([a-zA-Z0-9_]+)/ info.php?mod=pers&login=$1 [L,QSA]
а если так попробовать?


update:
Кстати, если мне не изменяет память, то /room([0-9])/ при, например, /room10/ или /room100500/ не отработает. Нужно писать /room([0-9]+)/.
А что значит (.*)?
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
(.*) = выбрать все, что будет находиться между скобками, вне зависимости от того, будет это "выфаоролвфлытдмдукм" или "параметр5123"
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
(.*) = выбрать все, что будет находиться между скобками, вне зависимости от того, будет это "выфаоролвфлытдмдукм" или "параметр5123"
Спасибо, работает!
Но проще было убрать букву L во флаге.. Хотя не знаю чем это может грозить мне.. но зато работает)
Я так понял, что L означает "прекратить перебор" регулярок..
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
Незачто, рад, что помог)

Но проще было убрать букву L во флаге..
Да, кстати, протупил я что-то. Флаг L в конце поставить нужно только. Он означает last rule - последнее выполняющееся правило.

QSA в общем то тоже не особо нужен, но так как у вас будут еще параметры, логичным будет дополнить регулярку
%{QUERY_STRING}-ом, а значит оставим)​

Тобишь выглядеть теперь должно так:
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$2 [QSA]
RewriteRule ^([a-zA-Z0-9_]+)/(.*)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$3&other_params=$2 [QSA]
RewriteRule ^([a-zA-Z0-9_]+)/ info.php?mod=pers&login=$1 [L,QSA]
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Тобишь выглядеть теперь должно так: RewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^([a-zA-Z0-9_]+)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$2 [QSA]RewriteRule ^([a-zA-Z0-9_]+)/(.*)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$3&other_params=$2 [QSA]RewriteRule ^([a-zA-Z0-9_]+)/ info.php?mod=pers&login=$1 [L,QSA]
Во-во! То, что надо:) Теперь все открываются по отдельности страницы и везде подключается мое окно всплывающее) Благодарю)

Код:
RewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^([a-zA-Z0-9_]+)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$2 [QSA]RewriteRule ^([a-zA-Z0-9_]+)/(.*)/room([0-9]+)/ info.php?mod=pers&login=$1&room=$3&other_params=$2 [QSA]RewriteRule ^([a-zA-Z0-9_]+)/ info.php?mod=pers&login=$1 [L,QSA]
А вот у всех этих регулярок одинаковое начало, нельзя ли их все обединить в одно условие?
Код:
[b]^([a-zA-Z0-9_]+)/[/b]
Например в пхп:
Код:
if($a=='2'){echo 'Число два';}
if($a=='2'){echo 'Число два, прибавим ещё один';}
if($a=='2'){echo 'Число два, отнимем один'; }
//Можно заменить на это:
if($a=='2'){
echo 'Число два';
echo 'прибавляем один';
echo 'отнимаем один';';
}
Ну что бы не проверять каждый раз, сделать одно условие)) Нельзя никак? А то если таких будет сотня, то сервер всё будет перебирать.. а так один раз проверит одно условие и если совадет, то пойдет дальше перебирать)
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
Думаю найдем решение, но вечер пятницы дает о себе знать, так что чуть-чуть позже подумаю и отпишусь)
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=Adanos], думал, думал... Может мало чем помогу, но я смотрел с такой стороны: 1. Передача произвольного количества параметров; 2. Объединить все строки .htaccess. Как вариант можно написать:
Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/(.*) info.php?mod=pers&login=$1&other_params=$2 [L,QSA]
И дальше уже в самом коде страницы разбирать other_params. Проверять наличие тех или иных параметров и в зависимости от этого строить логику.

Но это ситуативное такое решеньице. Не претендует даже на звание "грамотный подход". Возможно, если бы я больше знал о постановке задачи - решение бы придумал другое. Одно могу сказать точно - это должно работать, хоть это и чернуха) :blush:
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Вновь возникла проблема..
В .htaccess у меня прописано:

Код:
RewriteRule ^([a-zA-Z0-9_]+)/ biblo.php?mod=pers&blogin=$1 [QSA]
И вот из-за этой фигни у меня не открывается ни одна картинка на сайте:(

Код:
<img src="/images/">
Это воспринимается сайтом как "biblo.php?mod=pers&blogin=$1" и картинки естественно нет.
Иными словами: Сервер из-за этой регулярки принимает слово "images" в адресе картинки не как папку, а как логин пользователя.
Что делать?
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
добавьте
Код:
RewriteCond %{REQUEST_FILENAME} !-f
после RewriteEngine on

единственное что, тут не прописывается ошибка при отсутствии файла, ошибка пойдет запросом к biblo.php
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
добавьте
Код:
RewriteCond %{REQUEST_FILENAME} !-f
после RewriteEngine on

единственное что, тут не прописывается ошибка при отсутствии файла, ошибка пойдет запросом к biblo.php
Та стояло это и раньше.. один фиг не работает.. Сотру из htaccess эту регулярку - всё нормально открывается. Поставлю регулярку назад - картинок нет( В смысле они то есть, то их нет.. Когда хотят - тогда и открываются(

А нельзя никак регулярку дополнить? Что бы исключало слово "images" или может надо в папку images кинуть файл htaccess со своим каким-то содержанием, что бы это бралось как папка?

Нашел косяк) Вот блин.. И всё из-за одного символа(
Забыл знак $ поставить в конце регулярки - означает конец регулярки.
RewriteRule ^([a-zA-Z0-9_]+)/$ biblo.php?mod=pers&blogin=$1 [QSA]
 
Статус
Закрыто для дальнейших ответов.
Верх Низ