Nginx переписывает с% 3F - PullRequest
       12

Nginx переписывает с% 3F

1 голос
/ 24 февраля 2020

Для сайта, на котором работает Mediawiki, у меня есть этот конфиг для чистых URL:

rewrite ^/wiki/([^?]*)(?:\?(.*))? /wiki/index.php?title=$1&$2 last;

Это прекрасно работает, кроме случаев, когда заголовок страницы должен иметь знак вопроса. Для URL, например /wiki/Who_is_your_daddy%3F_It_is_me, правильный переписанный URL-адрес - /wiki/index.php?title=Who_is_your_daddy%3F_It_is_me. Тем не менее, Nginx переписывается в /wiki/index.php?title=Who_is_your_daddy&_It_is_me.

Какое правильное правило перезаписи?

1 Ответ

0 голосов
/ 24 февраля 2020

Строка запроса не является частью нормализованного URI, который обрабатывается регулярным выражением директивы rewrite. Однако строка запроса будет автоматически добавлена ​​к переписанному URI, поэтому вам не нужно ничего делать, чтобы включить часть &action=edit. Подробнее см. в этом документе .

Значение %3F в исходном запросе будет нормализовано до ? к моменту его обработки rewrite. Вам нужно будет захватить обе стороны ?, чтобы вручную перевести его обратно в %3F в новой строке запроса.

Вы можете использовать более одного оператора rewrite, так что в случае с и без %3F оба обрабатываются правильно.

Например:

rewrite ^/wiki/(.*)\?(.*)$ /wiki/index.php?title=$1%3f$2 last;
rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1 last;
...