Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Помогите с mod rewrite плиз
цитата
26/10/15 в 15:49
 Doctor
есть строка:

http://domain.com/top/name_http://url.com/

разбираем так:

RewriteRule ^top/(.*)_(.*)$ top.php?name=$1&url=$2 [L,QSA]

и вроде реврайт работает, но есть одно "НО" в $2 в урле двойной слэш склеивается в один...

саппорт хоста говорит: проблема с двойным слешем исходит от Апача, mod_rewrite по RFC меняет на один слеш

есть решение в конфиге nginx прописать merge_slashes off но беда в том, что и реврайт нужно прописывать тоже в конфиге нгинкса...
что не есть гуд, т.к. сам я править этот конфиг не могу (из-за панели), а каждый раз дергать саппорт тоже путь не лучший...

может есть какое-то элегантное решение сабжа?...)
цитата
26/10/15 в 19:51
 rickdeckard
> mod_rewrite по RFC меняет на один слеш
элегантное решение - отказатся от mod_rewrite и использовать реврайты nginx или в php


и сдается мне что

http://domain.com/top/name_http://url.com/

совсем некорректный урл
цитата
26/10/15 в 20:51
 johndoe2
Doctor писал:
есть строка:

http://domain.com/top/name_http://url.com/

разбираем так:

RewriteRule ^top/(.*)_(.*)$ top.php?name=$1&url=$2 [L,QSA]

и вроде реврайт работает, но есть одно "НО" в $2 в урле двойной слэш склеивается в один...

саппорт хоста говорит: проблема с двойным слешем исходит от Апача, mod_rewrite по RFC меняет на один слеш

есть решение в конфиге nginx прописать merge_slashes off но беда в том, что и реврайт нужно прописывать тоже в конфиге нгинкса...
что не есть гуд, т.к. сам я править этот конфиг не могу (из-за панели), а каждый раз дергать саппорт тоже путь не лучший...

может есть какое-то элегантное решение сабжа?...)


При создании таких линков нужно слеши, которые не являются частью path (физически или логически) пропускать через urlencode.

Что здесь видит апач?
http://domain.com/top/name_http://url.com/

path=/top/name_http://url.com/ и т.к. двойной слеш в пути по сути то же, что одинарный, ничего странного, что апач лишние слеши в PATH убирает.

Другое дело если http://url.com/ переставить в query
http://domain.com/top/name?http://url.com/

Здесь
path=/top/name
query=http://url.com/

и двойной слеш никуда не денется.

Если нужны линки именно вида http://domain.com/top/name_http://url.com/, тогда они должны приходить на сервер как http://domain.com/top/name_http:%2F%2Furl.com/
цитата
26/10/15 в 21:20
 Alexandur
Как бы само напрашивается
Код:

RewriteRule ^top/(.*)_http://(.*)$ top.php?name=$1&url=http://$2 [L,QSA]
цитата
26/10/15 в 22:04
 Doctor
johndoe2 писал:
При создании таких линков нужно слеши, которые не являются частью path (физически или логически) пропускать через urlencode.

Другое дело если http://url.com/ переставить в query
http://domain.com/top/name?http://url.com/

Здесь
path=/top/name
query=http://url.com/

и двойной слеш никуда не денется.


о, вот это хорошая мысль... но тогда строку

http://domain.com/top/name?http://url.com/

такой конструкцией не разобрать - в реврайтах я не силен..(

RewriteRule ^top/(.*)?(.*)$ top.php?name=$1&url=$2 [L,QSA]

прошу еще раз помощи тогда, какое в этом случае должно быть RewriteRule?
цитата
26/10/15 в 22:06
 Doctor
gimcnuk писал:
Как бы само напрашивается
Код:

RewriteRule ^top/(.*)_http://(.*)$ top.php?name=$1&url=http://$2 [L,QSA]


о, вот и элегантное решение... smail54.gif
цитата
26/10/15 в 22:40
 Doctor
Doctor писал:
о, вот это хорошая мысль... но тогда строку

http://domain.com/top/name?http://url.com/

такой конструкцией не разобрать - в реврайтах я не силен..(

RewriteRule ^top/(.*)?(.*)$ top.php?name=$1&url=$2 [L,QSA]

прошу еще раз помощи тогда, какое в этом случае должно быть RewriteRule?


нашел решение сам:

RewriteRule ^top/(.*)$ top.php?name=$1&url=%{QUERY_STRING} [L,QSA]

всем спасибо... smail54.gif


Эта страница в полной версии