проблемы rewrite + secure link, экранизация символа ? (вопроса)

zerko nginx-forum на forum.nginx.org
Чт Июл 5 21:22:20 UTC 2018


Здравствуйте форумчане, целый день провозился с проблемой, помогите
пожалуйста, буду признателен!
nginx version: nginx/1.14.0

стоит реврайт:
rewrite                                
^/sec/(.*)/(\d+)/((film|serial)/(.*))$ /stream/$3?md5=$1&expires=$2 last;

и есть этот локейшен:

location /stream {
		secure_link $arg_md5,$arg_expires;
		secure_link_md5 "$secure_link_expires$uri$remote_addr secret";

		if ($secure_link = "") {
				return 200 "$query_string $arg_md5 $uri $secure_link_expires $uri
$remote_addr secret";
		}

		if ($secure_link = "0") {
				return 410;
		}

		rewrite ^/stream/(.*)$ /content/vod/$1 break;
}

и запросы не приходят в локейшен /stream (Почему? я пологаю что не
передаются hash и expires, но даже без них должен обрабатываться запрос?),
стоит только добавить в регулярное вырожение экранирование \? (rewrite      
                          ^/sec/(.*)/(\d+)/((film|serial)/(.*))$
/stream/$3\?md5=$1&expires=$2 last;) - так все работает. НО! в переменную $3
добавляется этот слэш - "\", и расшифровка не происходит.. Что делать?
 
Интересно что даже без ЧПУ ссылок, ввида:

/stream/film/rampage.2018.720p/hls/720/index.m3u8?md5=sC-pYJ0gHU5PjJDi-18BOQ&expires=1530842792
запрос не работает тоже, в локейшен не попадает, добавляю \ перед ?
(вопросов) и все опять работает!!!

Надеюсь на вашу помощь. На другом сервере, на старой версии подобные
реврайты работают.

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,280425,280425#msg-280425



Подробная информация о списке рассылки nginx-ru