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 но беда в том, что и реврайт нужно прописывать тоже в конфиге нгинкса...
что не есть гуд, т.к. сам я править этот конфиг не могу (из-за панели), а каждый раз дергать саппорт тоже путь не лучший...
может есть какое-то элегантное решение сабжа?...)
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/
Alexandur
Как бы само напрашивается
Код:
RewriteRule ^top/(.*)_http://(.*)$ top.php?name=$1&url=http://$2 [L,QSA]
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?
Doctor
gimcnuk писал:
Как бы само напрашивается
Код:
RewriteRule ^top/(.*)_http://(.*)$ top.php?name=$1&url=http://$2 [L,QSA]
о, вот и элегантное решение...
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]
всем спасибо...