imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 12.06.2006, 12:12     # 1
Self Author
Junior Member
 
Регистрация: 07.02.2006
Адрес: Ростов-на-Дону
Сообщения: 52

Self Author Путь к славе только начался
Не работает mod_rewrite

Есть такая задача:
надо из адреса /folder/text?a=1
сделать /folder/?pg=text&a=1
причём параметр a может отсутствовать.

Делаю так:

Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_URI} ^/[^/]+/[^/?]+.*$
RewriteRule ^([^/]+)/([^/?]+).*$ /$1/?pg=$2&%{QUERY_STRING} [L]
Но Апач виснет. Что делаю не так?
Self Author вне форума  
Старый 13.06.2006, 10:04     # 2
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_URI} ^/forder/text\?(.*)$
RewriteRule .* /folder/?pg=text&%1 [L]

Поидее так должно работать на вскидку.

А у Вас, без проверки на то что УРЛ уже перезаписывался, просто идет зацикливание преобразования бесконечное.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 13.06.2006, 11:04     # 3
Self Author
Junior Member
 
Регистрация: 07.02.2006
Адрес: Ростов-на-Дону
Сообщения: 52

Self Author Путь к славе только начался
Цитата:
Hubbitus:
RewriteCond %{REQUEST_URI} ^/forder/text\?(.*)$
RewriteRule .* /folder/?pg=text&%1 [L]
Нет, без параметров нельзя. Folder и text каждый раз разные.


Цитата:
Hubbitus:
А у Вас, без проверки на то что УРЛ уже перезаписывался, просто идет зацикливание преобразования бесконечное.
Я же специально [L] поставил, чтобы больше ничего не делалось.

Кстати, если в последней строке вместо ([^/?]+) поставить ([a-z]+), то всё работает. Только мне нужно, чтобы были все символы кроме слэша и вопроса.
Self Author вне форума  
Старый 13.06.2006, 11:14     # 4
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
Self Author
Знак вопроса - системный символ в регулярных выражениях, попробуйте его экранировать.
SergoZD вне форума  
Старый 13.06.2006, 12:51     # 5
Self Author
Junior Member
 
Регистрация: 07.02.2006
Адрес: Ростов-на-Дону
Сообщения: 52

Self Author Путь к славе только начался
Цитата:
SergoZD:
Знак вопроса - системный символ в регулярных выражениях, попробуйте его экранировать.
Не в нём проблема.

Так работает:
Код:
RewriteCond %{REQUEST_URI} ^/[^/]+/[^/]+$
RewriteRule ^([^/]+)/([a-z]+)$ /$1/?pg=$2&%{QUERY_STRING} [L]
А так - нет:
Код:
RewriteCond %{REQUEST_URI} ^/[^/]+/[^/]+$
RewriteRule ^([^/]+)/([^/]+)$ /$1/?pg=$2&%{QUERY_STRING} [L]
А надо, чтобы работало во втором варианте, т.к. там в параметре может быть любой символ. А вопрос, кстати, в REQUEST_URI вообще не вылазит, даже если он есть в строке. (опытным путём обнаружил).
Self Author вне форума  
Старый 13.06.2006, 13:01     # 6
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Self Author:
Я же специально [L] поставил, чтобы больше ничего не делалось.
Дак в этом проходе ничего и не делается, делается в остальных проходах цикла Вы читали как работает преобразование вообще??

Попробуйте что-то вроде:
Код:
RewriteCond %{REQUEST_URI} !^\?pg=$
RewriteRule ^([^/]+)/([a-z]+)$ /$1/?pg=$2&%{QUERY_STRING} [L]
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 13.06.2006, 13:39     # 7
kibitzer
Junior Member
 
Регистрация: 28.11.2005
Адрес: питер
Сообщения: 160

kibitzer Луч света в тёмном царствеkibitzer Луч света в тёмном царствеkibitzer Луч света в тёмном царствеkibitzer Луч света в тёмном царствеkibitzer Луч света в тёмном царстве
поставить debug один раз и посмотреть что именно раскрывается и где виснет разве трудно? регулярное выражение у вас в RewriteRule относительно правильное, а вот RewriteCond бессмысленный абсолютно - не надо дублировать RewriteRule, зачем два раза делать?

Я бы сделал типа

RewriteCond $2 !^$
RewriteRule ^/([^/]+)/([^/?]+)$ /$1/?pg=$2&%{QUERY_STRING} [L]

будет выполняться только если $2 непустой.
kibitzer вне форума  
Старый 13.06.2006, 15:11     # 8
Self Author
Junior Member
 
Регистрация: 07.02.2006
Адрес: Ростов-на-Дону
Сообщения: 52

Self Author Путь к славе только начался
Заработало!

Рабочий вариант оказался такой:
Код:
RewriteCond %{QUERY_STRING} !pg=
RewriteRule ^([^/]+)/([^/]+)$ /$1/?pg=$2&%{QUERY_STRING} [L]
Проверять REQUEST_URI на параметры бессмысленно, т.к. там остаётся лишь то, что вводится в коммандную строку. А вот QUERY_STRING проверил. И заработало.
Self Author вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:07.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.